diff --git a/docs/fontbakery-reports/bigshotone-report.html b/docs/fontbakery-reports/bigshotone-report.html new file mode 100644 index 00000000..0f0cc8ec --- /dev/null +++ b/docs/fontbakery-reports/bigshotone-report.html @@ -0,0 +1,730 @@ + + + + + FontBakery Check Report + + + +
+ +
+ Fontbakery Technical Report +
+
+ +
+

If you think a check is flawed or have an idea for a check, please file an issue at https://github.com/fonttools/fontbakery/issues and remember to include a pointer to the repo and branch you're checking.

+

Summary

+ + + + + + + + + + + + + + + + + + + + + + + + + +
💥 ERROR🔥 FAIL⚠️ WARN⏩ SKIPℹ️ INFO✅ PASS
01013669143
0%6%8%39%5%84%
+ +

Note: The following loglevels were omitted in this report: SKIP, INFO, PASS, DEBUG

+ +

Meaning of check results:

+ + + +

If you get ERRORs, please help us improve the tool by reporting them at our + issue tracker.

+ +

(but other kinds of bug reports and/or feature requests + are also always welcome, of course!)

+ +

FontBakery version: 0.9.2

+ +

Section: Google Fonts

+🔥🔥🔥🔥🔥🔥🔥🔥⚠️⚠️⚠️⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ +

Does DESCRIPTION file contain a upstream Git repo URL?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/description/git_url>
+ +
🔥 BigshotOne-Regular.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+

DESCRIPTION.en_us.html must have more than 200 bytes.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/description/min_length>
+ +
🔥 BigshotOne-Regular.ttf
  • 🔥 FAIL

    DESCRIPTION.en_us.html must have size larger than 200 bytes. [code: too-short]

    +
+

DESCRIPTION.en_us.html should end in a linebreak.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/description/eof_linebreak>
+ +
⚠️ BigshotOne-Regular.ttf
  • ⚠️ WARN

    The last characther on DESCRIPTION.en_us.html is not a line-break. Please add it. [code: missing-eof-linebreak]

    +
+

Checking OS/2 achVendID.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/vendor_id>
+ +
⚠️ BigshotOne-Regular.ttf
  • ⚠️ WARN

    OS/2 VendorID value ' ' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+

Check Google Fonts glyph coverage.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/glyph_coverage>
+ +
🔥 BigshotOne-Regular.ttf
  • 🔥 FAIL

    Missing required codepoints:

    +
    - 0x2026 (HORIZONTAL ELLIPSIS)
    +
    +
    +- 0x0308 (COMBINING DIAERESIS)
    +
    +
    +- 0x0300 (COMBINING GRAVE ACCENT)
    +
    +
    +- 0x0301 (COMBINING ACUTE ACCENT)
    +
    +
    +- 0x030B (COMBINING DOUBLE ACUTE ACCENT)
    +
    +
    +- 0x0304 (COMBINING MACRON)
    +
    +
    +- 0x02D9 (DOT ABOVE)
    +
    +
    +- 0x0102 (LATIN CAPITAL LETTER A WITH BREVE)
    +
    +
    +- 0x0100 (LATIN CAPITAL LETTER A WITH MACRON)
    +
    +
    +- 0x0104 (LATIN CAPITAL LETTER A WITH OGONEK)
    +
    +
    +- 0x0106 (LATIN CAPITAL LETTER C WITH ACUTE)
    +
    +
    +- 0x010C (LATIN CAPITAL LETTER C WITH CARON)
    +
    +
    +- 0x010A (LATIN CAPITAL LETTER C WITH DOT ABOVE)
    +
    +
    +- 0x010E (LATIN CAPITAL LETTER D WITH CARON)
    +
    +
    +- 0x0110 (LATIN CAPITAL LETTER D WITH STROKE)
    +
    +
    +- 0x011A (LATIN CAPITAL LETTER E WITH CARON)
    +
    +
    +- 0x0116 (LATIN CAPITAL LETTER E WITH DOT ABOVE)
    +
    +
    +- 0x0112 (LATIN CAPITAL LETTER E WITH MACRON)
    +
    +
    +- 0x0118 (LATIN CAPITAL LETTER E WITH OGONEK)
    +
    +
    +- 0x011E (LATIN CAPITAL LETTER G WITH BREVE)
    +
    +
    +- 0x0122 (LATIN CAPITAL LETTER G WITH CEDILLA)
    +
    +
    +- 0x0120 (LATIN CAPITAL LETTER G WITH DOT ABOVE)
    +
    +
    +- 0x0126 (LATIN CAPITAL LETTER H WITH STROKE)
    +
    +
    +- 0x0130 (LATIN CAPITAL LETTER I WITH DOT ABOVE)
    +
    +
    +- 0x012A (LATIN CAPITAL LETTER I WITH MACRON)
    +
    +
    +- 0x012E (LATIN CAPITAL LETTER I WITH OGONEK)
    +
    +
    +- 0x0136 (LATIN CAPITAL LETTER K WITH CEDILLA)
    +
    +
    +- 0x0139 (LATIN CAPITAL LETTER L WITH ACUTE)
    +
    +
    +- 0x013D (LATIN CAPITAL LETTER L WITH CARON)
    +
    +
    +- 0x013B (LATIN CAPITAL LETTER L WITH CEDILLA)
    +
    +
    +- 0x0141 (LATIN CAPITAL LETTER L WITH STROKE)
    +
    +
    +- 0x0143 (LATIN CAPITAL LETTER N WITH ACUTE)
    +
    +
    +- 0x0147 (LATIN CAPITAL LETTER N WITH CARON)
    +
    +
    +- 0x0145 (LATIN CAPITAL LETTER N WITH CEDILLA)
    +
    +
    +- 0x014A (LATIN CAPITAL LETTER ENG)
    +
    +
    +- 0x0150 (LATIN CAPITAL LETTER O WITH DOUBLE ACUTE)
    +
    +
    +- 0x014C (LATIN CAPITAL LETTER O WITH MACRON)
    +
    +
    +- 0x0154 (LATIN CAPITAL LETTER R WITH ACUTE)
    +
    +
    +- 0x0158 (LATIN CAPITAL LETTER R WITH CARON)
    +
    +
    +- 0x0156 (LATIN CAPITAL LETTER R WITH CEDILLA)
    +
    +
    +- 0x015A (LATIN CAPITAL LETTER S WITH ACUTE)
    +
    +
    +- 0x0160 (LATIN CAPITAL LETTER S WITH CARON)
    +
    +
    +- 0x015E (LATIN CAPITAL LETTER S WITH CEDILLA)
    +
    +
    +- 0x0218 (LATIN CAPITAL LETTER S WITH COMMA BELOW)
    +
    +
    +- 0x1E9E (LATIN CAPITAL LETTER SHARP S)
    +
    +
    +- 0x0164 (LATIN CAPITAL LETTER T WITH CARON)
    +
    +
    +- 0x021A (LATIN CAPITAL LETTER T WITH COMMA BELOW)
    +
    +
    +- 0x016C (LATIN CAPITAL LETTER U WITH BREVE)
    +
    +
    +- 0x0170 (LATIN CAPITAL LETTER U WITH DOUBLE ACUTE)
    +
    +
    +- 0x016A (LATIN CAPITAL LETTER U WITH MACRON)
    +
    +
    +- 0x0172 (LATIN CAPITAL LETTER U WITH OGONEK)
    +
    +
    +- 0x016E (LATIN CAPITAL LETTER U WITH RING ABOVE)
    +
    +
    +- 0x1E82 (LATIN CAPITAL LETTER W WITH ACUTE)
    +
    +
    +- 0x0174 (LATIN CAPITAL LETTER W WITH CIRCUMFLEX)
    +
    +
    +- 0x1E84 (LATIN CAPITAL LETTER W WITH DIAERESIS)
    +
    +
    +- 0x1E80 (LATIN CAPITAL LETTER W WITH GRAVE)
    +
    +
    +- 0x0176 (LATIN CAPITAL LETTER Y WITH CIRCUMFLEX)
    +
    +
    +- 0x1EF2 (LATIN CAPITAL LETTER Y WITH GRAVE)
    +
    +
    +- 0x0179 (LATIN CAPITAL LETTER Z WITH ACUTE)
    +
    +
    +- 0x017D (LATIN CAPITAL LETTER Z WITH CARON)
    +
    +
    +- 0x017B (LATIN CAPITAL LETTER Z WITH DOT ABOVE)
    +
    +
    +- 0x0103 (LATIN SMALL LETTER A WITH BREVE)
    +
    +
    +- 0x0101 (LATIN SMALL LETTER A WITH MACRON)
    +
    +
    +- 0x0105 (LATIN SMALL LETTER A WITH OGONEK)
    +
    +
    +- 0x0107 (LATIN SMALL LETTER C WITH ACUTE)
    +
    +
    +- 0x010D (LATIN SMALL LETTER C WITH CARON)
    +
    +
    +- 0x010B (LATIN SMALL LETTER C WITH DOT ABOVE)
    +
    +
    +- 0x010F (LATIN SMALL LETTER D WITH CARON)
    +
    +
    +- 0x0111 (LATIN SMALL LETTER D WITH STROKE)
    +
    +
    +- 0x011B (LATIN SMALL LETTER E WITH CARON)
    +
    +
    +- 0x0117 (LATIN SMALL LETTER E WITH DOT ABOVE)
    +
    +
    +- 0x0113 (LATIN SMALL LETTER E WITH MACRON)
    +
    +
    +- 0x0119 (LATIN SMALL LETTER E WITH OGONEK)
    +
    +
    +- 0x011F (LATIN SMALL LETTER G WITH BREVE)
    +
    +
    +- 0x0123 (LATIN SMALL LETTER G WITH CEDILLA)
    +
    +
    +- 0x0121 (LATIN SMALL LETTER G WITH DOT ABOVE)
    +
    +
    +- 0x0127 (LATIN SMALL LETTER H WITH STROKE)
    +
    +
    +- 0x012B (LATIN SMALL LETTER I WITH MACRON)
    +
    +
    +- 0x012F (LATIN SMALL LETTER I WITH OGONEK)
    +
    +
    +- 0x0237 (LATIN SMALL LETTER DOTLESS J)
    +
    +
    +- 0x0137 (LATIN SMALL LETTER K WITH CEDILLA)
    +
    +
    +- 0x013A (LATIN SMALL LETTER L WITH ACUTE)
    +
    +
    +- 0x013E (LATIN SMALL LETTER L WITH CARON)
    +
    +
    +- 0x013C (LATIN SMALL LETTER L WITH CEDILLA)
    +
    +
    +- 0x0142 (LATIN SMALL LETTER L WITH STROKE)
    +
    +
    +- 0x0144 (LATIN SMALL LETTER N WITH ACUTE)
    +
    +
    +- 0x0148 (LATIN SMALL LETTER N WITH CARON)
    +
    +
    +- 0x0146 (LATIN SMALL LETTER N WITH CEDILLA)
    +
    +
    +- 0x014B (LATIN SMALL LETTER ENG)
    +
    +
    +- 0x0151 (LATIN SMALL LETTER O WITH DOUBLE ACUTE)
    +
    +
    +- 0x014D (LATIN SMALL LETTER O WITH MACRON)
    +
    +
    +- 0x0155 (LATIN SMALL LETTER R WITH ACUTE)
    +
    +
    +- 0x0159 (LATIN SMALL LETTER R WITH CARON)
    +
    +
    +- 0x0157 (LATIN SMALL LETTER R WITH CEDILLA)
    +
    +
    +- 0x015B (LATIN SMALL LETTER S WITH ACUTE)
    +
    +
    +- 0x0161 (LATIN SMALL LETTER S WITH CARON)
    +
    +
    +- 0x015F (LATIN SMALL LETTER S WITH CEDILLA)
    +
    +
    +- 0x0219 (LATIN SMALL LETTER S WITH COMMA BELOW)
    +
    +
    +- 0x0165 (LATIN SMALL LETTER T WITH CARON)
    +
    +
    +- 0x021B (LATIN SMALL LETTER T WITH COMMA BELOW)
    +
    +
    +- 0x016D (LATIN SMALL LETTER U WITH BREVE)
    +
    +
    +- 0x0171 (LATIN SMALL LETTER U WITH DOUBLE ACUTE)
    +
    +
    +- 0x016B (LATIN SMALL LETTER U WITH MACRON)
    +
    +
    +- 0x0173 (LATIN SMALL LETTER U WITH OGONEK)
    +
    +
    +- 0x016F (LATIN SMALL LETTER U WITH RING ABOVE)
    +
    +
    +- 0x1E83 (LATIN SMALL LETTER W WITH ACUTE)
    +
    +
    +- 0x0175 (LATIN SMALL LETTER W WITH CIRCUMFLEX)
    +
    +
    +- 0x1E85 (LATIN SMALL LETTER W WITH DIAERESIS)
    +
    +
    +- 0x1E81 (LATIN SMALL LETTER W WITH GRAVE)
    +
    +
    +- 0x0177 (LATIN SMALL LETTER Y WITH CIRCUMFLEX)
    +
    +
    +- 0x1EF3 (LATIN SMALL LETTER Y WITH GRAVE)
    +
    +
    +- 0x017A (LATIN SMALL LETTER Z WITH ACUTE)
    +
    +
    +- 0x017E (LATIN SMALL LETTER Z WITH CARON)
    +
    +
    +- 0x017C (LATIN SMALL LETTER Z WITH DOT ABOVE)
    +
    +
    +- 0x2122 (TRADE MARK SIGN)
    +
    +
    +- 0x0307 (COMBINING DOT ABOVE)
    +
    +
    +- 0x0302 (COMBINING CIRCUMFLEX ACCENT)
    +
    +
    +- 0x030C (COMBINING CARON)
    +
    +
    +- 0x0306 (COMBINING BREVE)
    +
    +
    +- 0x030A (COMBINING RING ABOVE)
    +
    +
    +- 0x0303 (COMBINING TILDE)
    +
    +
    +- 0x0312 (COMBINING TURNED COMMA ABOVE)
    +
    +
    +- 0x0326 (COMBINING COMMA BELOW)
    +
    +
    +- 0x0327 (COMBINING CEDILLA)
    +
    +
    +- 0x0328 (COMBINING OGONEK)
    +
    +
    +- 0x02DD (DOUBLE ACUTE ACCENT)
    +
    +
    +- 0x02C7 (CARON)
    +
    +
    +- 0x02D8 (BREVE)
    +
    +
    +- 0x02DB (OGONEK)
    +
    +

    [code: missing-codepoints]

    +
+

Check for codepoints not covered by METADATA subsets.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/unreachable_subsetting>
+ +
⚠️ BigshotOne-Regular.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS: try adding latin-ext
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: latin, menu [code: unreachable-subsetting]

    +
+

Check license file has good copyright string.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/license/OFL_copyright>
+ +
🔥 BigshotOne-Regular.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2011, gesine todt (hallo@gesine-todt.de),"

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+

Check copyright namerecords match license file.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/name/license>
+ +
🔥 BigshotOne-Regular.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011 Bigshot One by Gesine Todt www.gesine-todt.de. All rights reserved. This Font Software is licensed under the SIL Open Font License, Version 1.1." 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011 Bigshot One by Gesine Todt www.gesine-todt.de. All rights reserved. This Font Software is licensed under the SIL Open Font License, Version 1.1." 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]

    +
+

Copyright notices match canonical pattern in METADATA.pb

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/valid_copyright>
+ +
🔥 BigshotOne-Regular.ttf
  • 🔥 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 (c) 2011 by gesine todt. all rights reserved." [code: bad-notice-format]

    +
+

Copyright notices match canonical pattern in fonts

+
Check ID: <FontBakeryCheck:com.google.fonts/check/font_copyright>
+ +
🔥 BigshotOne-Regular.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011 by Gesine Todt. All rights reserved." [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011 by Gesine Todt. All rights reserved." [code: bad-notice-format]

    +
+

A static fonts directory with at least two fonts must accompany variable fonts

+
Check ID: <FontBakeryCheck:com.google.fonts/check/repo/vf_has_static_fonts>
+ +
⚠️ BigshotOne-Regular.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+

On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/description/family_update>
+ +
⚠️ BigshotOne-Regular.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+

OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/os2/use_typo_metrics>
+ +
🔥 BigshotOne-Regular.ttf
  • 🔥 FAIL

    OS/2.fsSelection bit 7 (USE_TYPO_METRICS) wasNOT set in the following fonts: ['/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf']. [code: missing-os2-fsselection-bit7]

    +
+

Ensure fonts have ScriptLangTags declared on the 'meta' table.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/meta/script_lang_tags>
+ +
⚠️ BigshotOne-Regular.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+

Ensure fonts do not contain any pre-production tables.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/no_debugging_tables>
+ +
⚠️ BigshotOne-Regular.ttf
  • ⚠️ WARN

    This font file contains the following pre-production tables: FFTM [code: has-debugging-tables]

    +
+

Section: Universal

+🔥🔥⚠️⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩⏩ℹ️ℹ️ +

Checking with ots-sanitize.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/ots>
+ +
⚠️ BigshotOne-Regular.ttf
  • ⚠️ WARN

    ots-sanitize passed this file, however warnings were printed:

    +

    WARNING: gasp: Changed the version number to 1 +[code: ots-sanitize-warn]

    +
+

Font contains '.notdef' as its first glyph?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/mandatory_glyphs>
+ +
🔥 BigshotOne-Regular.ttf
  • 🔥 FAIL

    The '.notdef' glyph should contain a drawing, but it is blank. [code: notdef-is-blank]

    +
+

Are there unwanted tables?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/unwanted_tables>
+ +
🔥 BigshotOne-Regular.ttf
  • 🔥 FAIL

    The following unwanted font tables were found:

    +
      +
    • FFTM - Table contains redundant FontForge timestamp info
    • +
    +

    They can be removed with the 'fix-unwanted-tables' script provided by gftools. [code: unwanted-tables]

    +
+

Check font contains no unreachable glyphs

+
Check ID: <FontBakeryCheck:com.google.fonts/check/unreachable_glyphs>
+ +
⚠️ BigshotOne-Regular.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - nonmarkingreturn
    +
    +

    [code: unreachable-glyphs]

    +
+

Check if each glyph has the recommended amount of contours.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/contour_count>
+ +
⚠️ BigshotOne-Regular.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni00AD	Contours detected: 1	Expected: 0
    +
    +- Glyph name: Ocircumflex	Contours detected: 2	Expected: 3
    +
    +- Glyph name: Ocircumflex	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni00AD	Contours detected: 1	Expected: 0
    +
    +

    [code: contour-count]

    +
+

Does the font contain a soft hyphen?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/soft_hyphen>
+ +
⚠️ BigshotOne-Regular.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+

Check math signs have the same width.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/math_signs_width>
+ +
⚠️ BigshotOne-Regular.ttf
  • ⚠️ WARN

    The most common width is 472 among a set of 4 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 391: +less, greater

    +

    Width = 440: +logicalnot

    +

    Width = 502: +multiply

    +

    Width = 442: +minus +[code: width-outliers]

    +
+

Section: fontbakery.profiles.dsig

+⚠️ +

Does the font have a DSIG table?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/dsig>
+ +
⚠️ BigshotOne-Regular.ttf
  • ⚠️ WARN

    This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly. +The current recommendation is to completely remove the DSIG table. [code: found-DSIG]

    +
+
+ + \ No newline at end of file diff --git a/docs/fontbakery-reports/bigshotone-report.json b/docs/fontbakery-reports/bigshotone-report.json new file mode 100644 index 00000000..4f743250 --- /dev/null +++ b/docs/fontbakery-reports/bigshotone-report.json @@ -0,0 +1,5719 @@ +{ + "result": { + "FAIL": 10, + "INFO": 9, + "PASS": 143, + "SKIP": 66, + "WARN": 13 + }, + "sections": [ + { + "checks": [ + { + "description": "Ensure that all variable font files have the same set of axes and axis ranges.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: VFs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n In order to facilitate the construction of intuitive and friendly user\n interfaces, all variable font files in a given family should have the same set\n of variation axes. Also, each axis must have a consistent setting of min/max\n value ranges accross all the files.\n ", + "result": "SKIP" + }, + { + "description": "All tabular figures must have the same width across the RIBBI-family.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tabular figures need to have the same metrics in all styles in order to allow\n tables to be set with proper typographic control, but to maintain the placement\n of decimals and numeric columns between rows.\n\n Here's a good explanation of this:\n https://www.typography.com/techniques/fonts-for-financials/#tabular-figs\n ", + "result": "PASS" + }, + { + "description": "Does font file include unacceptable control character glyphs?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Unacceptable control characters were not identified.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Use of some unacceptable control characters in the U+0000 - U+001F range can\n lead to rendering issues on some platforms.\n\n Acceptable control characters are defined as .null (U+0000) and\n CR (U+000D) for this test.\n ", + "result": "PASS" + }, + { + "description": "Ensure Italic styles have Roman counterparts.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For each font family on Google Fonts, every Italic style must have\n a Roman sibling.\n\n This kind of problem was first observed at [1] where the Bold style was\n missing but BoldItalic was included.\n\n [1] https://github.com/google/fonts/pull/1482\n ", + "result": "PASS" + }, + { + "description": "Check axis ordering on the STAT table.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "From a total of 1 font files, 1 of them (100.00%) lack a STAT table.\n\n\tAnd these are the most common STAT axis orderings:\n\t [code: summary]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is (for now) a merely informative check to detect what's the axis ordering\n declared on the STAT table of fonts in the Google Fonts collection.\n\n We may later update this to enforce some unified axis ordering scheme,\n yet to be determined.\n ", + "result": "INFO" + }, + { + "description": "Check README.md has a sample image.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: readme_contents, readme_directory", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n In order to showcase what a font family looks like, the project's README.md\n file should ideally include a sample image and highlight it in the upper\n portion of the document, no more than 10 lines away from the top of the file.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"BigshotOne-Regular.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html must have size larger than 200 bytes. [code: too-short]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The last characther on DESCRIPTION.en_us.html is not a line-break. Please add it. [code: missing-eof-linebreak]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "WARN" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value ' ' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Missing required codepoints:\n\n\t- 0x2026 (HORIZONTAL ELLIPSIS)\n\n\n\t- 0x0308 (COMBINING DIAERESIS)\n\n\n\t- 0x0300 (COMBINING GRAVE ACCENT)\n\n\n\t- 0x0301 (COMBINING ACUTE ACCENT)\n\n\n\t- 0x030B (COMBINING DOUBLE ACUTE ACCENT)\n\n\n\t- 0x0304 (COMBINING MACRON)\n\n\n\t- 0x02D9 (DOT ABOVE)\n\n\n\t- 0x0102 (LATIN CAPITAL LETTER A WITH BREVE)\n\n\n\t- 0x0100 (LATIN CAPITAL LETTER A WITH MACRON)\n\n\n\t- 0x0104 (LATIN CAPITAL LETTER A WITH OGONEK)\n\n\n\t- 0x0106 (LATIN CAPITAL LETTER C WITH ACUTE)\n\n\n\t- 0x010C (LATIN CAPITAL LETTER C WITH CARON)\n\n\n\t- 0x010A (LATIN CAPITAL LETTER C WITH DOT ABOVE)\n\n\n\t- 0x010E (LATIN CAPITAL LETTER D WITH CARON)\n\n\n\t- 0x0110 (LATIN CAPITAL LETTER D WITH STROKE)\n\n\n\t- 0x011A (LATIN CAPITAL LETTER E WITH CARON)\n\n\n\t- 0x0116 (LATIN CAPITAL LETTER E WITH DOT ABOVE)\n\n\n\t- 0x0112 (LATIN CAPITAL LETTER E WITH MACRON)\n\n\n\t- 0x0118 (LATIN CAPITAL LETTER E WITH OGONEK)\n\n\n\t- 0x011E (LATIN CAPITAL LETTER G WITH BREVE)\n\n\n\t- 0x0122 (LATIN CAPITAL LETTER G WITH CEDILLA)\n\n\n\t- 0x0120 (LATIN CAPITAL LETTER G WITH DOT ABOVE)\n\n\n\t- 0x0126 (LATIN CAPITAL LETTER H WITH STROKE)\n\n\n\t- 0x0130 (LATIN CAPITAL LETTER I WITH DOT ABOVE)\n\n\n\t- 0x012A (LATIN CAPITAL LETTER I WITH MACRON)\n\n\n\t- 0x012E (LATIN CAPITAL LETTER I WITH OGONEK)\n\n\n\t- 0x0136 (LATIN CAPITAL LETTER K WITH CEDILLA)\n\n\n\t- 0x0139 (LATIN CAPITAL LETTER L WITH ACUTE)\n\n\n\t- 0x013D (LATIN CAPITAL LETTER L WITH CARON)\n\n\n\t- 0x013B (LATIN CAPITAL LETTER L WITH CEDILLA)\n\n\n\t- 0x0141 (LATIN CAPITAL LETTER L WITH STROKE)\n\n\n\t- 0x0143 (LATIN CAPITAL LETTER N WITH ACUTE)\n\n\n\t- 0x0147 (LATIN CAPITAL LETTER N WITH CARON)\n\n\n\t- 0x0145 (LATIN CAPITAL LETTER N WITH CEDILLA)\n\n\n\t- 0x014A (LATIN CAPITAL LETTER ENG)\n\n\n\t- 0x0150 (LATIN CAPITAL LETTER O WITH DOUBLE ACUTE)\n\n\n\t- 0x014C (LATIN CAPITAL LETTER O WITH MACRON)\n\n\n\t- 0x0154 (LATIN CAPITAL LETTER R WITH ACUTE)\n\n\n\t- 0x0158 (LATIN CAPITAL LETTER R WITH CARON)\n\n\n\t- 0x0156 (LATIN CAPITAL LETTER R WITH CEDILLA)\n\n\n\t- 0x015A (LATIN CAPITAL LETTER S WITH ACUTE)\n\n\n\t- 0x0160 (LATIN CAPITAL LETTER S WITH CARON)\n\n\n\t- 0x015E (LATIN CAPITAL LETTER S WITH CEDILLA)\n\n\n\t- 0x0218 (LATIN CAPITAL LETTER S WITH COMMA BELOW)\n\n\n\t- 0x1E9E (LATIN CAPITAL LETTER SHARP S)\n\n\n\t- 0x0164 (LATIN CAPITAL LETTER T WITH CARON)\n\n\n\t- 0x021A (LATIN CAPITAL LETTER T WITH COMMA BELOW)\n\n\n\t- 0x016C (LATIN CAPITAL LETTER U WITH BREVE)\n\n\n\t- 0x0170 (LATIN CAPITAL LETTER U WITH DOUBLE ACUTE)\n\n\n\t- 0x016A (LATIN CAPITAL LETTER U WITH MACRON)\n\n\n\t- 0x0172 (LATIN CAPITAL LETTER U WITH OGONEK)\n\n\n\t- 0x016E (LATIN CAPITAL LETTER U WITH RING ABOVE)\n\n\n\t- 0x1E82 (LATIN CAPITAL LETTER W WITH ACUTE)\n\n\n\t- 0x0174 (LATIN CAPITAL LETTER W WITH CIRCUMFLEX)\n\n\n\t- 0x1E84 (LATIN CAPITAL LETTER W WITH DIAERESIS)\n\n\n\t- 0x1E80 (LATIN CAPITAL LETTER W WITH GRAVE)\n\n\n\t- 0x0176 (LATIN CAPITAL LETTER Y WITH CIRCUMFLEX)\n\n\n\t- 0x1EF2 (LATIN CAPITAL LETTER Y WITH GRAVE)\n\n\n\t- 0x0179 (LATIN CAPITAL LETTER Z WITH ACUTE)\n\n\n\t- 0x017D (LATIN CAPITAL LETTER Z WITH CARON)\n\n\n\t- 0x017B (LATIN CAPITAL LETTER Z WITH DOT ABOVE)\n\n\n\t- 0x0103 (LATIN SMALL LETTER A WITH BREVE)\n\n\n\t- 0x0101 (LATIN SMALL LETTER A WITH MACRON)\n\n\n\t- 0x0105 (LATIN SMALL LETTER A WITH OGONEK)\n\n\n\t- 0x0107 (LATIN SMALL LETTER C WITH ACUTE)\n\n\n\t- 0x010D (LATIN SMALL LETTER C WITH CARON)\n\n\n\t- 0x010B (LATIN SMALL LETTER C WITH DOT ABOVE)\n\n\n\t- 0x010F (LATIN SMALL LETTER D WITH CARON)\n\n\n\t- 0x0111 (LATIN SMALL LETTER D WITH STROKE)\n\n\n\t- 0x011B (LATIN SMALL LETTER E WITH CARON)\n\n\n\t- 0x0117 (LATIN SMALL LETTER E WITH DOT ABOVE)\n\n\n\t- 0x0113 (LATIN SMALL LETTER E WITH MACRON)\n\n\n\t- 0x0119 (LATIN SMALL LETTER E WITH OGONEK)\n\n\n\t- 0x011F (LATIN SMALL LETTER G WITH BREVE)\n\n\n\t- 0x0123 (LATIN SMALL LETTER G WITH CEDILLA)\n\n\n\t- 0x0121 (LATIN SMALL LETTER G WITH DOT ABOVE)\n\n\n\t- 0x0127 (LATIN SMALL LETTER H WITH STROKE)\n\n\n\t- 0x012B (LATIN SMALL LETTER I WITH MACRON)\n\n\n\t- 0x012F (LATIN SMALL LETTER I WITH OGONEK)\n\n\n\t- 0x0237 (LATIN SMALL LETTER DOTLESS J)\n\n\n\t- 0x0137 (LATIN SMALL LETTER K WITH CEDILLA)\n\n\n\t- 0x013A (LATIN SMALL LETTER L WITH ACUTE)\n\n\n\t- 0x013E (LATIN SMALL LETTER L WITH CARON)\n\n\n\t- 0x013C (LATIN SMALL LETTER L WITH CEDILLA)\n\n\n\t- 0x0142 (LATIN SMALL LETTER L WITH STROKE)\n\n\n\t- 0x0144 (LATIN SMALL LETTER N WITH ACUTE)\n\n\n\t- 0x0148 (LATIN SMALL LETTER N WITH CARON)\n\n\n\t- 0x0146 (LATIN SMALL LETTER N WITH CEDILLA)\n\n\n\t- 0x014B (LATIN SMALL LETTER ENG)\n\n\n\t- 0x0151 (LATIN SMALL LETTER O WITH DOUBLE ACUTE)\n\n\n\t- 0x014D (LATIN SMALL LETTER O WITH MACRON)\n\n\n\t- 0x0155 (LATIN SMALL LETTER R WITH ACUTE)\n\n\n\t- 0x0159 (LATIN SMALL LETTER R WITH CARON)\n\n\n\t- 0x0157 (LATIN SMALL LETTER R WITH CEDILLA)\n\n\n\t- 0x015B (LATIN SMALL LETTER S WITH ACUTE)\n\n\n\t- 0x0161 (LATIN SMALL LETTER S WITH CARON)\n\n\n\t- 0x015F (LATIN SMALL LETTER S WITH CEDILLA)\n\n\n\t- 0x0219 (LATIN SMALL LETTER S WITH COMMA BELOW)\n\n\n\t- 0x0165 (LATIN SMALL LETTER T WITH CARON)\n\n\n\t- 0x021B (LATIN SMALL LETTER T WITH COMMA BELOW)\n\n\n\t- 0x016D (LATIN SMALL LETTER U WITH BREVE)\n\n\n\t- 0x0171 (LATIN SMALL LETTER U WITH DOUBLE ACUTE)\n\n\n\t- 0x016B (LATIN SMALL LETTER U WITH MACRON)\n\n\n\t- 0x0173 (LATIN SMALL LETTER U WITH OGONEK)\n\n\n\t- 0x016F (LATIN SMALL LETTER U WITH RING ABOVE)\n\n\n\t- 0x1E83 (LATIN SMALL LETTER W WITH ACUTE)\n\n\n\t- 0x0175 (LATIN SMALL LETTER W WITH CIRCUMFLEX)\n\n\n\t- 0x1E85 (LATIN SMALL LETTER W WITH DIAERESIS)\n\n\n\t- 0x1E81 (LATIN SMALL LETTER W WITH GRAVE)\n\n\n\t- 0x0177 (LATIN SMALL LETTER Y WITH CIRCUMFLEX)\n\n\n\t- 0x1EF3 (LATIN SMALL LETTER Y WITH GRAVE)\n\n\n\t- 0x017A (LATIN SMALL LETTER Z WITH ACUTE)\n\n\n\t- 0x017E (LATIN SMALL LETTER Z WITH CARON)\n\n\n\t- 0x017C (LATIN SMALL LETTER Z WITH DOT ABOVE)\n\n\n\t- 0x2122 (TRADE MARK SIGN)\n\n\n\t- 0x0307 (COMBINING DOT ABOVE)\n\n\n\t- 0x0302 (COMBINING CIRCUMFLEX ACCENT)\n\n\n\t- 0x030C (COMBINING CARON)\n\n\n\t- 0x0306 (COMBINING BREVE)\n\n\n\t- 0x030A (COMBINING RING ABOVE)\n\n\n\t- 0x0303 (COMBINING TILDE)\n\n\n\t- 0x0312 (COMBINING TURNED COMMA ABOVE)\n\n\n\t- 0x0326 (COMBINING COMMA BELOW)\n\n\n\t- 0x0327 (COMBINING CEDILLA)\n\n\n\t- 0x0328 (COMBINING OGONEK)\n\n\n\t- 0x02DD (DOUBLE ACUTE ACCENT)\n\n\n\t- 0x02C7 (CARON)\n\n\n\t- 0x02D8 (BREVE)\n\n\n\t- 0x02DB (OGONEK)\n [code: missing-codepoints]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "FAIL" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS: try adding latin-ext\n\nOr you can add the above codepoints to one of the subsets supported by the font: `latin`, `menu` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2011, gesine todt (hallo@gesine-todt.de),\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011 Bigshot One by Gesine Todt www.gesine-todt.de. All rights reserved. This Font Software is licensed under the SIL Open Font License, Version 1.1.\" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011 Bigshot One by Gesine Todt www.gesine-todt.de. All rights reserved. This Font Software is licensed under the SIL Open Font License, Version 1.1.\" 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]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "SKIP" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All description name records have reasonably small lengths.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "PASS" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 35.6kb |\n | Hinted Size | 43.8kb |\n | Increase | 8.2kb |\n | Change | 23.1 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 1.001', 'Version 1.001'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Bigshot One\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"BigshotOne-Regular\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Bigshot One Regular\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Bigshot One Regular\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Bigshot One\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Bigshot One\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Bigshot One\" in \"Bigshot One Regular\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Bigshot One\" in \"Bigshot One Regular\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011 by gesine todt. all rights reserved.\" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011 by Gesine Todt. All rights reserved.\" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011 by Gesine Todt. All rights reserved.\" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb copyright field does not contain \"Reserved Font Name\".", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to italic fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.style \"normal\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 1000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs are similar in comparison to the Google Fonts version.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Bigshot One | Bigshot One |\n| Subfamily Name | Regular | Regular |\n| Full Name | Bigshot One Regular | Bigshot One Regular |\n| Poscript Name | BigshotOne-Regular | BigshotOne-Regular |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 1.001\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "None of the name table strings contain \"Reserved Font Name\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "PASS" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "PASS" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "PASS" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) wasNOT set in the following fonts: ['/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf']. [code: missing-os2-fsselection-bit7]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font file contains the following pre-production tables: FFTM [code: has-debugging-tables]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "WARN", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"bigshotone\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Bigshot One)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "FAIL": 8, + "INFO": 6, + "PASS": 88, + "SKIP": 28, + "WARN": 7 + } + }, + { + "checks": [ + { + "description": "Checking all files are in the same directory.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "All files are in the same directory.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the set of font files passed in the command line is not all in the\n same directory, then we warn the user since the tool will interpret the\n set of files as belonging to a single family (and it is unlikely that\n the user would store the files from a single family spreaded\n in several separate directories).\n ", + "result": "PASS" + }, + { + "description": "Each font in a family must have the same set of vertical metrics values.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Vertical metrics are the same across the family.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want all fonts within a family to have the same vertical metrics so\n their line spacing is consistent across the family.\n ", + "result": "PASS" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No trailing spaces on name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file, however warnings were printed:\n\nWARNING: gasp: Changed the version number to 1\n [code: ots-sanitize-warn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The '.notdef' glyph should contain a drawing, but it is blank. [code: notdef-is-blank]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "FAIL" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has **AGL recommended** names for whitespace glyphs.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "PASS" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The following unwanted font tables were found:\n\n* FFTM - Table contains redundant FontForge timestamp info\n\nThey can be removed with the 'fix-unwanted-tables' script provided by gftools. [code: unwanted-tables]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "FAIL" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyph names are all valid.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "PASS" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyph names are all unique.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "PASS" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- nonmarkingreturn\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni00AD\tContours detected: 1\tExpected: 0\n\n\t- Glyph name: Ocircumflex\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: Ocircumflex\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni00AD\tContours detected: 1\tExpected: 0\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No glyphs had components with scaling or rotation", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "PASS" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 472 among a set of 4 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 391:\nless, greater\n\nWidth = 440:\nlogicalnot\n\nWidth = 502:\nmultiply\n\nWidth = 442:\nminus\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "FAIL": 2, + "INFO": 2, + "PASS": 18, + "SKIP": 6, + "WARN": 5 + } + }, + { + "checks": [ + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 3 + } + }, + { + "checks": [ + { + "description": "Fonts have equal unicode encodings?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have equal unicode encodings.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "Make sure all font files have the same version value.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "All font files have the same version.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3, + "SKIP": 1 + } + }, + { + "checks": [ + { + "description": "Fonts have consistent PANOSE proportion?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent PANOSE proportion.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Fonts have consistent PANOSE family type?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent PANOSE family type.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that OS/2.fsSelection bold & italic settings are unique for each NameID1", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "The OS/2.fsSelection bold & italic settings were unique within each compatible family group.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec: name ID 1 'is used in combination with Font Subfamily\n name (name ID 2), and should be shared among at most four fonts that differ\n only in weight or style.\n\n This four-way distinction should also be reflected in the OS/2.fsSelection\n field, using bits 0 and 5.\n ", + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth is 519 but it should be 517 which corresponds to the average of the widths of all glyphs in the font. These are similar values, which may be a symptom of the slightly different calculation of the xAvgCharWidth value in font editors. There's further discussion on this at https://github.com/fonttools/fontbakery/issues/1622 [code: xAvgCharWidth-close]", + "status": "INFO", + "traceback": null + } + ], + "result": "INFO" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "INFO": 1, + "PASS": 6, + "SKIP": 1 + } + }, + { + "checks": [ + { + "description": "Fonts have consistent underline thickness?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent underline thickness.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Dave C Lemon (Adobe Type Team) recommends setting the underline thickness to be\n consistent across the family.\n\n If thicknesses are not family consistent, words set on the same line which have\n different styles look strange.\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has an acceptable post format 2.0 table version.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "PASS" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is 0.0 with style=\"Regular\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3 + } + }, + { + "checks": [ + { + "description": "Verify that each group of fonts with the same nameID 1 has maximum of 4 fonts.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "There were no more than 4 fonts per family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec:\n\n 'The Font Family name [...] should be shared among at most four fonts that\n differ only in weight or style [...]'\n ", + "result": "PASS" + }, + { + "description": "Verify that family names in the name table are consistent across all fonts in the family. Checks Typographic Family name (nameID 16) if present, otherwise uses Font Family name (nameID 1)", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Font family names are consistent across the family.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec:\n * \"...many existing applications that use this pair of names assume that a\n Font Family name is shared by at most four fonts that form a font\n style-linking group\"\n * \"For extended typographic families that includes fonts other than the\n four basic styles(regular, italic, bold, bold italic), it is strongly\n recommended that name IDs 16 and 17 be used in fonts to create an\n extended, typographic grouping.\"\n * \"If name ID 16 is absent, then name ID 1 is considered to be the\n typographic family name.\"\n\n https://learn.microsoft.com/en-us/typography/opentype/spec/name\n\n Fonts within a font family all must have consistent names\n in the Typographic Family name (nameID 16)\n or Font Family name (nameID 1), depending on which it uses.\n\n Inconsistent font/typographic family names across fonts in a family\n can result in unexpected behaviors, such as broken style linking.\n ", + "result": "PASS" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font is not Italic.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 9, + "SKIP": 2 + } + }, + { + "checks": [ + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 2 + } + }, + { + "checks": [ + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly.\nThe current recommendation is to completely remove the DSIG table. [code: found-DSIG]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "WARN" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "WARN": 1 + } + }, + { + "checks": [ + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not has spacing glyphs in the GDEF mark glyph class.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "PASS" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not have mark characters not in the GDEF mark glyph class.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "PASS" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not have non-mark characters in the GDEF mark glyph class.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3 + } + }, + { + "checks": [ + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3 + } + }, + { + "checks": [ + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 16 + } + }, + { + "checks": [ + { + "description": "Ensure VFs have 'ital' STAT axis.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check that related Upright and Italic VFs have a\n 'ital' axis in STAT table.\n ", + "result": "PASS" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1, + "SKIP": 4 + } + }, + { + "checks": [ + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3 + } + }, + { + "checks": [ + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/bigshotone/BigshotOne-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has no soft dotted characters or no mark above characters.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "SKIP", + "severity": 3 + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 5 + } + } + ] +} \ No newline at end of file diff --git a/docs/fontbakery-reports/bigshotone/GoogleFonts.json b/docs/fontbakery-reports/bigshotone/GoogleFonts.json new file mode 100644 index 00000000..07acd5fe --- /dev/null +++ b/docs/fontbakery-reports/bigshotone/GoogleFonts.json @@ -0,0 +1,7 @@ +{ + "color": "green", + "label": "Google Fonts", + "logoSvg": "", + "message": "80%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/bigshotone/ShapingChecks.json b/docs/fontbakery-reports/bigshotone/ShapingChecks.json new file mode 100644 index 00000000..97e1be33 --- /dev/null +++ b/docs/fontbakery-reports/bigshotone/ShapingChecks.json @@ -0,0 +1,7 @@ +{ + "color": "inactive", + "label": "Shaping Checks", + "logoSvg": "", + "message": "SKIP", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/bigshotone/Universal.json b/docs/fontbakery-reports/bigshotone/Universal.json new file mode 100644 index 00000000..d7cf9e9c --- /dev/null +++ b/docs/fontbakery-reports/bigshotone/Universal.json @@ -0,0 +1,7 @@ +{ + "color": "yellow", + "label": "Universal", + "logoSvg": "", + "message": "69%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/bigshotone/overall.json b/docs/fontbakery-reports/bigshotone/overall.json new file mode 100644 index 00000000..7f87038e --- /dev/null +++ b/docs/fontbakery-reports/bigshotone/overall.json @@ -0,0 +1,7 @@ +{ + "color": "green", + "label": "FontBakery QA", + "logoSvg": "", + "message": "82%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/carroisgothicsc-report.html b/docs/fontbakery-reports/carroisgothicsc-report.html new file mode 100644 index 00000000..df8db0e2 --- /dev/null +++ b/docs/fontbakery-reports/carroisgothicsc-report.html @@ -0,0 +1,801 @@ + + + + + FontBakery Check Report + + + +
+ +
+ Fontbakery Technical Report +
+
+ +
+

If you think a check is flawed or have an idea for a check, please file an issue at https://github.com/fonttools/fontbakery/issues and remember to include a pointer to the repo and branch you're checking.

+

Summary

+ + + + + + + + + + + + + + + + + + + + + + + + + +
💥 ERROR🔥 FAIL⚠️ WARN⏩ SKIPℹ️ INFO✅ PASS
0814687144
0%5%8%40%4%84%
+ +

Note: The following loglevels were omitted in this report: SKIP, INFO, PASS, DEBUG

+ +

Meaning of check results:

+ +
    +
  • 💥 An ERROR is something wrong with FontBakery itself, possibly a bug. +
  • 🔥 A FAIL is a problem with the font that must be fixed. +
  • ⚠️ A WARN is something that you should consider addressing. +
  • ℹ️ An INFO result simply prints something useful. Typically stats. +
  • ✅ A PASS means the font looks good for the given checking routine. +
  • ⏩ And a SKIP happens when the check does not apply to the given font. +
+ +

If you get ERRORs, please help us improve the tool by reporting them at our + issue tracker.

+ +

(but other kinds of bug reports and/or feature requests + are also always welcome, of course!)

+ +

FontBakery version: 0.9.2

+ +

Section: Google Fonts

+🔥🔥🔥🔥🔥🔥🔥🔥⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩ℹ️ℹ️ℹ️ℹ️ℹ️ +

Does font file include unacceptable control character glyphs?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/family/control_chars>
+ +
🔥 Family check
  • 🔥 FAIL

    The following unacceptable control characters were identified: +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf: uni0001, uni0002, uni0003, uni0004, uni0005, uni0006, uni0007, uni0008, uni0009, uni0010, uni0011, uni0012, uni0013, uni0014, uni0015, uni0016, uni0017, uni0018, uni0019 +[code: unacceptable]

    +
+

Does DESCRIPTION file contain a upstream Git repo URL?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/description/git_url>
+ +
🔥 CarroisGothicSC-Regular.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+

Checking OS/2 achVendID.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/vendor_id>
+ +
⚠️ CarroisGothicSC-Regular.ttf
  • ⚠️ WARN

    OS/2 VendorID is 'PYRS', a font editor default. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: bad]

    +
+

Check Google Fonts glyph coverage.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/glyph_coverage>
+ +
🔥 CarroisGothicSC-Regular.ttf
  • 🔥 FAIL

    Missing required codepoints:

    +
    - 0x2026 (HORIZONTAL ELLIPSIS)
    +
    +
    +- 0x0308 (COMBINING DIAERESIS)
    +
    +
    +- 0x0300 (COMBINING GRAVE ACCENT)
    +
    +
    +- 0x0301 (COMBINING ACUTE ACCENT)
    +
    +
    +- 0x030B (COMBINING DOUBLE ACUTE ACCENT)
    +
    +
    +- 0x0304 (COMBINING MACRON)
    +
    +
    +- 0x02D9 (DOT ABOVE)
    +
    +
    +- 0x0102 (LATIN CAPITAL LETTER A WITH BREVE)
    +
    +
    +- 0x0100 (LATIN CAPITAL LETTER A WITH MACRON)
    +
    +
    +- 0x0104 (LATIN CAPITAL LETTER A WITH OGONEK)
    +
    +
    +- 0x0106 (LATIN CAPITAL LETTER C WITH ACUTE)
    +
    +
    +- 0x010C (LATIN CAPITAL LETTER C WITH CARON)
    +
    +
    +- 0x010A (LATIN CAPITAL LETTER C WITH DOT ABOVE)
    +
    +
    +- 0x010E (LATIN CAPITAL LETTER D WITH CARON)
    +
    +
    +- 0x0110 (LATIN CAPITAL LETTER D WITH STROKE)
    +
    +
    +- 0x011A (LATIN CAPITAL LETTER E WITH CARON)
    +
    +
    +- 0x0116 (LATIN CAPITAL LETTER E WITH DOT ABOVE)
    +
    +
    +- 0x0112 (LATIN CAPITAL LETTER E WITH MACRON)
    +
    +
    +- 0x0118 (LATIN CAPITAL LETTER E WITH OGONEK)
    +
    +
    +- 0x011E (LATIN CAPITAL LETTER G WITH BREVE)
    +
    +
    +- 0x0122 (LATIN CAPITAL LETTER G WITH CEDILLA)
    +
    +
    +- 0x0120 (LATIN CAPITAL LETTER G WITH DOT ABOVE)
    +
    +
    +- 0x0126 (LATIN CAPITAL LETTER H WITH STROKE)
    +
    +
    +- 0x0130 (LATIN CAPITAL LETTER I WITH DOT ABOVE)
    +
    +
    +- 0x012A (LATIN CAPITAL LETTER I WITH MACRON)
    +
    +
    +- 0x012E (LATIN CAPITAL LETTER I WITH OGONEK)
    +
    +
    +- 0x0136 (LATIN CAPITAL LETTER K WITH CEDILLA)
    +
    +
    +- 0x0139 (LATIN CAPITAL LETTER L WITH ACUTE)
    +
    +
    +- 0x013D (LATIN CAPITAL LETTER L WITH CARON)
    +
    +
    +- 0x013B (LATIN CAPITAL LETTER L WITH CEDILLA)
    +
    +
    +- 0x0147 (LATIN CAPITAL LETTER N WITH CARON)
    +
    +
    +- 0x0145 (LATIN CAPITAL LETTER N WITH CEDILLA)
    +
    +
    +- 0x014A (LATIN CAPITAL LETTER ENG)
    +
    +
    +- 0x0150 (LATIN CAPITAL LETTER O WITH DOUBLE ACUTE)
    +
    +
    +- 0x014C (LATIN CAPITAL LETTER O WITH MACRON)
    +
    +
    +- 0x015A (LATIN CAPITAL LETTER S WITH ACUTE)
    +
    +
    +- 0x0160 (LATIN CAPITAL LETTER S WITH CARON)
    +
    +
    +- 0x015E (LATIN CAPITAL LETTER S WITH CEDILLA)
    +
    +
    +- 0x0218 (LATIN CAPITAL LETTER S WITH COMMA BELOW)
    +
    +
    +- 0x1E9E (LATIN CAPITAL LETTER SHARP S)
    +
    +
    +- 0x0164 (LATIN CAPITAL LETTER T WITH CARON)
    +
    +
    +- 0x021A (LATIN CAPITAL LETTER T WITH COMMA BELOW)
    +
    +
    +- 0x016C (LATIN CAPITAL LETTER U WITH BREVE)
    +
    +
    +- 0x0170 (LATIN CAPITAL LETTER U WITH DOUBLE ACUTE)
    +
    +
    +- 0x016A (LATIN CAPITAL LETTER U WITH MACRON)
    +
    +
    +- 0x0172 (LATIN CAPITAL LETTER U WITH OGONEK)
    +
    +
    +- 0x016E (LATIN CAPITAL LETTER U WITH RING ABOVE)
    +
    +
    +- 0x1E82 (LATIN CAPITAL LETTER W WITH ACUTE)
    +
    +
    +- 0x0174 (LATIN CAPITAL LETTER W WITH CIRCUMFLEX)
    +
    +
    +- 0x1E84 (LATIN CAPITAL LETTER W WITH DIAERESIS)
    +
    +
    +- 0x1E80 (LATIN CAPITAL LETTER W WITH GRAVE)
    +
    +
    +- 0x0176 (LATIN CAPITAL LETTER Y WITH CIRCUMFLEX)
    +
    +
    +- 0x0178 (LATIN CAPITAL LETTER Y WITH DIAERESIS)
    +
    +
    +- 0x1EF2 (LATIN CAPITAL LETTER Y WITH GRAVE)
    +
    +
    +- 0x0179 (LATIN CAPITAL LETTER Z WITH ACUTE)
    +
    +
    +- 0x017D (LATIN CAPITAL LETTER Z WITH CARON)
    +
    +
    +- 0x017B (LATIN CAPITAL LETTER Z WITH DOT ABOVE)
    +
    +
    +- 0x0103 (LATIN SMALL LETTER A WITH BREVE)
    +
    +
    +- 0x0101 (LATIN SMALL LETTER A WITH MACRON)
    +
    +
    +- 0x0105 (LATIN SMALL LETTER A WITH OGONEK)
    +
    +
    +- 0x0107 (LATIN SMALL LETTER C WITH ACUTE)
    +
    +
    +- 0x010D (LATIN SMALL LETTER C WITH CARON)
    +
    +
    +- 0x010B (LATIN SMALL LETTER C WITH DOT ABOVE)
    +
    +
    +- 0x010F (LATIN SMALL LETTER D WITH CARON)
    +
    +
    +- 0x0111 (LATIN SMALL LETTER D WITH STROKE)
    +
    +
    +- 0x011B (LATIN SMALL LETTER E WITH CARON)
    +
    +
    +- 0x0117 (LATIN SMALL LETTER E WITH DOT ABOVE)
    +
    +
    +- 0x0113 (LATIN SMALL LETTER E WITH MACRON)
    +
    +
    +- 0x0119 (LATIN SMALL LETTER E WITH OGONEK)
    +
    +
    +- 0x011F (LATIN SMALL LETTER G WITH BREVE)
    +
    +
    +- 0x0123 (LATIN SMALL LETTER G WITH CEDILLA)
    +
    +
    +- 0x0121 (LATIN SMALL LETTER G WITH DOT ABOVE)
    +
    +
    +- 0x012B (LATIN SMALL LETTER I WITH MACRON)
    +
    +
    +- 0x012F (LATIN SMALL LETTER I WITH OGONEK)
    +
    +
    +- 0x013A (LATIN SMALL LETTER L WITH ACUTE)
    +
    +
    +- 0x013E (LATIN SMALL LETTER L WITH CARON)
    +
    +
    +- 0x013C (LATIN SMALL LETTER L WITH CEDILLA)
    +
    +
    +- 0x0148 (LATIN SMALL LETTER N WITH CARON)
    +
    +
    +- 0x0146 (LATIN SMALL LETTER N WITH CEDILLA)
    +
    +
    +- 0x014B (LATIN SMALL LETTER ENG)
    +
    +
    +- 0x0151 (LATIN SMALL LETTER O WITH DOUBLE ACUTE)
    +
    +
    +- 0x014D (LATIN SMALL LETTER O WITH MACRON)
    +
    +
    +- 0x0155 (LATIN SMALL LETTER R WITH ACUTE)
    +
    +
    +- 0x015B (LATIN SMALL LETTER S WITH ACUTE)
    +
    +
    +- 0x0161 (LATIN SMALL LETTER S WITH CARON)
    +
    +
    +- 0x015F (LATIN SMALL LETTER S WITH CEDILLA)
    +
    +
    +- 0x0219 (LATIN SMALL LETTER S WITH COMMA BELOW)
    +
    +
    +- 0x0165 (LATIN SMALL LETTER T WITH CARON)
    +
    +
    +- 0x021B (LATIN SMALL LETTER T WITH COMMA BELOW)
    +
    +
    +- 0x016D (LATIN SMALL LETTER U WITH BREVE)
    +
    +
    +- 0x0171 (LATIN SMALL LETTER U WITH DOUBLE ACUTE)
    +
    +
    +- 0x016B (LATIN SMALL LETTER U WITH MACRON)
    +
    +
    +- 0x0173 (LATIN SMALL LETTER U WITH OGONEK)
    +
    +
    +- 0x016F (LATIN SMALL LETTER U WITH RING ABOVE)
    +
    +
    +- 0x1E83 (LATIN SMALL LETTER W WITH ACUTE)
    +
    +
    +- 0x0175 (LATIN SMALL LETTER W WITH CIRCUMFLEX)
    +
    +
    +- 0x1E85 (LATIN SMALL LETTER W WITH DIAERESIS)
    +
    +
    +- 0x1E81 (LATIN SMALL LETTER W WITH GRAVE)
    +
    +
    +- 0x0177 (LATIN SMALL LETTER Y WITH CIRCUMFLEX)
    +
    +
    +- 0x1EF3 (LATIN SMALL LETTER Y WITH GRAVE)
    +
    +
    +- 0x017A (LATIN SMALL LETTER Z WITH ACUTE)
    +
    +
    +- 0x017E (LATIN SMALL LETTER Z WITH CARON)
    +
    +
    +- 0x017C (LATIN SMALL LETTER Z WITH DOT ABOVE)
    +
    +
    +- 0x2122 (TRADE MARK SIGN)
    +
    +
    +- 0x2212 (MINUS SIGN)
    +
    +
    +- 0x0302 (COMBINING CIRCUMFLEX ACCENT)
    +
    +
    +- 0x030C (COMBINING CARON)
    +
    +
    +- 0x0306 (COMBINING BREVE)
    +
    +
    +- 0x030A (COMBINING RING ABOVE)
    +
    +
    +- 0x0303 (COMBINING TILDE)
    +
    +
    +- 0x0312 (COMBINING TURNED COMMA ABOVE)
    +
    +
    +- 0x0326 (COMBINING COMMA BELOW)
    +
    +
    +- 0x0327 (COMBINING CEDILLA)
    +
    +
    +- 0x0328 (COMBINING OGONEK)
    +
    +
    +- 0x02DD (DOUBLE ACUTE ACCENT)
    +
    +
    +- 0x02D8 (BREVE)
    +
    +
    +- 0x02DB (OGONEK)
    +
    +

    [code: missing-codepoints]

    +
+

Check for codepoints not covered by METADATA subsets.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/unreachable_subsetting>
+ +
⚠️ CarroisGothicSC-Regular.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+0001 : try adding symbols
    • +
    • U+0002 : try adding symbols
    • +
    • U+0003 : try adding symbols
    • +
    • U+0004 : try adding symbols
    • +
    • U+0005 : try adding symbols
    • +
    • U+0006 : try adding symbols
    • +
    • U+0007 : try adding symbols
    • +
    • U+0008 : try adding symbols
    • +
    • U+0009 : try adding symbols
    • +
    • U+0010 : try adding symbols
    • +
    • U+0011 : try adding symbols
    • +
    • U+0012 : try adding symbols
    • +
    • U+0013 : try adding symbols
    • +
    • U+0014 : try adding symbols
    • +
    • U+0015 : try adding symbols
    • +
    • U+0016 : try adding symbols
    • +
    • U+0017 : try adding symbols
    • +
    • U+0018 : try adding symbols
    • +
    • U+0019 : try adding symbols
    • +
    • U+0127 LATIN SMALL LETTER H WITH STROKE: try adding latin-ext
    • +
    • U+0128 LATIN CAPITAL LETTER I WITH TILDE: try adding one of: latin-ext, vietnamese
    • +
    • U+0129 LATIN SMALL LETTER I WITH TILDE: try adding one of: latin-ext, vietnamese
    • +
    • U+0132 LATIN CAPITAL LIGATURE IJ: try adding latin-ext
    • +
    • U+0133 LATIN SMALL LIGATURE IJ: try adding latin-ext
    • +
    • U+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX: try adding latin-ext
    • +
    • U+0135 LATIN SMALL LETTER J WITH CIRCUMFLEX: try adding latin-ext
    • +
    • U+0137 LATIN SMALL LETTER K WITH CEDILLA: try adding latin-ext
    • +
    • U+0138 LATIN SMALL LETTER KRA: try adding latin-ext
    • +
    • U+013F LATIN CAPITAL LETTER L WITH MIDDLE DOT: try adding latin-ext
    • +
    • U+0140 LATIN SMALL LETTER L WITH MIDDLE DOT: try adding latin-ext
    • +
    • U+0141 LATIN CAPITAL LETTER L WITH STROKE: try adding latin-ext
    • +
    • U+0142 LATIN SMALL LETTER L WITH STROKE: try adding latin-ext
    • +
    • U+0143 LATIN CAPITAL LETTER N WITH ACUTE: try adding latin-ext
    • +
    • U+0144 LATIN SMALL LETTER N WITH ACUTE: try adding latin-ext
    • +
    • U+0154 LATIN CAPITAL LETTER R WITH ACUTE: try adding latin-ext
    • +
    • U+0156 LATIN CAPITAL LETTER R WITH CEDILLA: try adding latin-ext
    • +
    • U+0157 LATIN SMALL LETTER R WITH CEDILLA: try adding latin-ext
    • +
    • U+0158 LATIN CAPITAL LETTER R WITH CARON: try adding latin-ext
    • +
    • U+0159 LATIN SMALL LETTER R WITH CARON: try adding latin-ext
    • +
    • U+0237 LATIN SMALL LETTER DOTLESS J: try adding latin-ext
    • +
    • U+02C7 CARON: try adding one of: tifinagh, yi, canadian-aboriginal
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, tifinagh, tai-le, coptic, syriac, old-permic, canadian-aboriginal, malayalam
    • +
    • U+F6C3 : not included in any glyphset definition
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: latin, menu [code: unreachable-subsetting]

    +
+

Check license file has good copyright string.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/license/OFL_copyright>
+ +
🔥 CarroisGothicSC-Regular.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2011 by ralph du carrois, with reserved font name 'carrois'"

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+

Check copyright namerecords match license file.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/name/license>
+ +
⚠️ CarroisGothicSC-Regular.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+

License URL matches License text on name table?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/name/license_url>
+ +
⚠️ CarroisGothicSC-Regular.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=14] [code: http-in-license-info]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=14] [code: http-in-license-info]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+

Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/gasp>
+ +
⚠️ CarroisGothicSC-Regular.ttf
  • ⚠️ WARN

    The gasp table has a range of 8 that may be unneccessary. [code: non-ffff-range]

    +
  • ⚠️ WARN

    The gasp table has a range of 20 that may be unneccessary. [code: non-ffff-range]

    +
  • ⚠️ WARN

    The gasp table has a range of 96 that may be unneccessary. [code: non-ffff-range]

    +
  • ⚠️ WARN

    The gasp range 0xFFFF value 0x0A should be set to 0x0F. [code: unset-flags]

    +
+

Copyright notices match canonical pattern in METADATA.pb

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/valid_copyright>
+ +
🔥 CarroisGothicSC-Regular.ttf
  • 🔥 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 (c) 2011 by ralph du carrois, with reserved font name 'carrois'" [code: bad-notice-format]

    +
+

Copyright notices match canonical pattern in fonts

+
Check ID: <FontBakeryCheck:com.google.fonts/check/font_copyright>
+ +
🔥 CarroisGothicSC-Regular.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011 by Ralph du Carrois, with Reserved Font Name 'Carrois'" [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011 by Ralph du Carrois, with Reserved Font Name 'Carrois'" [code: bad-notice-format]

    +
+

Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/reserved_font_name>
+ +
⚠️ CarroisGothicSC-Regular.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011 by Ralph du Carrois, with Reserved Font Name 'Carrois'") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+

Font enables smart dropout control in "prep" table instructions?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/smart_dropout>
+ +
🔥 CarroisGothicSC-Regular.ttf
  • 🔥 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]

    +
+

A static fonts directory with at least two fonts must accompany variable fonts

+
Check ID: <FontBakeryCheck:com.google.fonts/check/repo/vf_has_static_fonts>
+ +
⚠️ CarroisGothicSC-Regular.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+

Ensure METADATA.pb does not use escaped strings.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/escaped_strings>
+ +
🔥 CarroisGothicSC-Regular.ttf
  • 🔥 FAIL

    Found escaped chars at 'Carrois'. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011 by Ralph du Carrois, with Reserved Font Name 'Carrois''. Please use an unicode string instead. [code: escaped-strings]

    +
+

On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/description/family_update>
+ +
⚠️ CarroisGothicSC-Regular.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+

Ensure fonts have ScriptLangTags declared on the 'meta' table.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/meta/script_lang_tags>
+ +
⚠️ CarroisGothicSC-Regular.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+

Section: Universal

+⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩ℹ️ℹ️ +

Font has **proper** whitespace glyph names?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/whitespace_glyphnames>
+ +
⚠️ CarroisGothicSC-Regular.ttf
  • ⚠️ WARN

    Glyph 0x00A0 is called "nonbreakingspace": Change to "uni00A0" [code: not-recommended-00a0]

    +
+

Check font contains no unreachable glyphs

+
Check ID: <FontBakeryCheck:com.google.fonts/check/unreachable_glyphs>
+ +
⚠️ CarroisGothicSC-Regular.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - dotaccentcmb.cap
    +
    +- foundryicon
    +
    +- nonmarkingreturn
    +
    +

    [code: unreachable-glyphs]

    +
+

Check if each glyph has the recommended amount of contours.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/contour_count>
+ +
⚠️ CarroisGothicSC-Regular.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: b	Contours detected: 3	Expected: 2
    +
    +- Glyph name: e	Contours detected: 1	Expected: 2
    +
    +- Glyph name: g	Contours detected: 1	Expected: 2 or 3
    +
    +- Glyph name: i	Contours detected: 1	Expected: 2
    +
    +- Glyph name: j	Contours detected: 1	Expected: 2
    +
    +- Glyph name: r	Contours detected: 2	Expected: 1
    +
    +- Glyph name: uni00AD	Contours detected: 1	Expected: 0
    +
    +- Glyph name: germandbls	Contours detected: 2	Expected: 1
    +
    +- Glyph name: aring	Contours detected: 3	Expected: 4
    +
    +- Glyph name: ae	Contours detected: 2	Expected: 3
    +
    +- Glyph name: egrave	Contours detected: 2	Expected: 3
    +
    +- Glyph name: eacute	Contours detected: 2	Expected: 3
    +
    +- Glyph name: ecircumflex	Contours detected: 2	Expected: 3
    +
    +- Glyph name: edieresis	Contours detected: 3	Expected: 4
    +
    +- Glyph name: hbar	Contours detected: 2	Expected: 1
    +
    +- Glyph name: ij	Contours detected: 2	Expected: 3 or 4
    +
    +- Glyph name: oe	Contours detected: 2	Expected: 3
    +
    +- Glyph name: rcommaaccent	Contours detected: 3	Expected: 2
    +
    +- Glyph name: rcaron	Contours detected: 3	Expected: 2
    +
    +- Glyph name: ae	Contours detected: 2	Expected: 3
    +
    +- Glyph name: aring	Contours detected: 3	Expected: 4
    +
    +- Glyph name: b	Contours detected: 3	Expected: 2
    +
    +- Glyph name: e	Contours detected: 1	Expected: 2
    +
    +- Glyph name: eacute	Contours detected: 2	Expected: 3
    +
    +- Glyph name: ecircumflex	Contours detected: 2	Expected: 3
    +
    +- Glyph name: edieresis	Contours detected: 3	Expected: 4
    +
    +- Glyph name: egrave	Contours detected: 2	Expected: 3
    +
    +- Glyph name: g	Contours detected: 1	Expected: 2 or 3
    +
    +- Glyph name: germandbls	Contours detected: 2	Expected: 1
    +
    +- Glyph name: hbar	Contours detected: 2	Expected: 1
    +
    +- Glyph name: i	Contours detected: 1	Expected: 2
    +
    +- Glyph name: ij	Contours detected: 2	Expected: 3 or 4
    +
    +- Glyph name: j	Contours detected: 1	Expected: 2
    +
    +- Glyph name: oe	Contours detected: 2	Expected: 3
    +
    +- Glyph name: r	Contours detected: 2	Expected: 1
    +
    +- Glyph name: rcaron	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni00AD	Contours detected: 1	Expected: 0
    +
    +

    [code: contour-count]

    +
+

Does the font contain a soft hyphen?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/soft_hyphen>
+ +
⚠️ CarroisGothicSC-Regular.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+

Section: fontbakery.profiles.dsig

+⚠️ +

Does the font have a DSIG table?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/dsig>
+ +
⚠️ CarroisGothicSC-Regular.ttf
  • ⚠️ WARN

    This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly. +The current recommendation is to completely remove the DSIG table. [code: found-DSIG]

    +
+
+ + \ No newline at end of file diff --git a/docs/fontbakery-reports/carroisgothicsc-report.json b/docs/fontbakery-reports/carroisgothicsc-report.json new file mode 100644 index 00000000..0dad5a5a --- /dev/null +++ b/docs/fontbakery-reports/carroisgothicsc-report.json @@ -0,0 +1,5792 @@ +{ + "result": { + "FAIL": 8, + "INFO": 7, + "PASS": 144, + "SKIP": 68, + "WARN": 14 + }, + "sections": [ + { + "checks": [ + { + "description": "Ensure that all variable font files have the same set of axes and axis ranges.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: VFs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n In order to facilitate the construction of intuitive and friendly user\n interfaces, all variable font files in a given family should have the same set\n of variation axes. Also, each axis must have a consistent setting of min/max\n value ranges accross all the files.\n ", + "result": "SKIP" + }, + { + "description": "All tabular figures must have the same width across the RIBBI-family.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tabular figures need to have the same metrics in all styles in order to allow\n tables to be set with proper typographic control, but to maintain the placement\n of decimals and numeric columns between rows.\n\n Here's a good explanation of this:\n https://www.typography.com/techniques/fonts-for-financials/#tabular-figs\n ", + "result": "PASS" + }, + { + "description": "Does font file include unacceptable control character glyphs?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "The following unacceptable control characters were identified:\n /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf: uni0001, uni0002, uni0003, uni0004, uni0005, uni0006, uni0007, uni0008, uni0009, uni0010, uni0011, uni0012, uni0013, uni0014, uni0015, uni0016, uni0017, uni0018, uni0019\n [code: unacceptable]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Use of some unacceptable control characters in the U+0000 - U+001F range can\n lead to rendering issues on some platforms.\n\n Acceptable control characters are defined as .null (U+0000) and\n CR (U+000D) for this test.\n ", + "result": "FAIL" + }, + { + "description": "Ensure Italic styles have Roman counterparts.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For each font family on Google Fonts, every Italic style must have\n a Roman sibling.\n\n This kind of problem was first observed at [1] where the Bold style was\n missing but BoldItalic was included.\n\n [1] https://github.com/google/fonts/pull/1482\n ", + "result": "PASS" + }, + { + "description": "Check axis ordering on the STAT table.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "From a total of 1 font files, 1 of them (100.00%) lack a STAT table.\n\n\tAnd these are the most common STAT axis orderings:\n\t [code: summary]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is (for now) a merely informative check to detect what's the axis ordering\n declared on the STAT table of fonts in the Google Fonts collection.\n\n We may later update this to enforce some unified axis ordering scheme,\n yet to be determined.\n ", + "result": "INFO" + }, + { + "description": "Check README.md has a sample image.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: readme_contents, readme_directory", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n In order to showcase what a font family looks like, the project's README.md\n file should ideally include a sample image and highlight it in the upper\n portion of the document, no more than 10 lines away from the top of the file.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"CarroisGothicSC-Regular.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID is 'PYRS', a font editor default. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: bad]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Missing required codepoints:\n\n\t- 0x2026 (HORIZONTAL ELLIPSIS)\n\n\n\t- 0x0308 (COMBINING DIAERESIS)\n\n\n\t- 0x0300 (COMBINING GRAVE ACCENT)\n\n\n\t- 0x0301 (COMBINING ACUTE ACCENT)\n\n\n\t- 0x030B (COMBINING DOUBLE ACUTE ACCENT)\n\n\n\t- 0x0304 (COMBINING MACRON)\n\n\n\t- 0x02D9 (DOT ABOVE)\n\n\n\t- 0x0102 (LATIN CAPITAL LETTER A WITH BREVE)\n\n\n\t- 0x0100 (LATIN CAPITAL LETTER A WITH MACRON)\n\n\n\t- 0x0104 (LATIN CAPITAL LETTER A WITH OGONEK)\n\n\n\t- 0x0106 (LATIN CAPITAL LETTER C WITH ACUTE)\n\n\n\t- 0x010C (LATIN CAPITAL LETTER C WITH CARON)\n\n\n\t- 0x010A (LATIN CAPITAL LETTER C WITH DOT ABOVE)\n\n\n\t- 0x010E (LATIN CAPITAL LETTER D WITH CARON)\n\n\n\t- 0x0110 (LATIN CAPITAL LETTER D WITH STROKE)\n\n\n\t- 0x011A (LATIN CAPITAL LETTER E WITH CARON)\n\n\n\t- 0x0116 (LATIN CAPITAL LETTER E WITH DOT ABOVE)\n\n\n\t- 0x0112 (LATIN CAPITAL LETTER E WITH MACRON)\n\n\n\t- 0x0118 (LATIN CAPITAL LETTER E WITH OGONEK)\n\n\n\t- 0x011E (LATIN CAPITAL LETTER G WITH BREVE)\n\n\n\t- 0x0122 (LATIN CAPITAL LETTER G WITH CEDILLA)\n\n\n\t- 0x0120 (LATIN CAPITAL LETTER G WITH DOT ABOVE)\n\n\n\t- 0x0126 (LATIN CAPITAL LETTER H WITH STROKE)\n\n\n\t- 0x0130 (LATIN CAPITAL LETTER I WITH DOT ABOVE)\n\n\n\t- 0x012A (LATIN CAPITAL LETTER I WITH MACRON)\n\n\n\t- 0x012E (LATIN CAPITAL LETTER I WITH OGONEK)\n\n\n\t- 0x0136 (LATIN CAPITAL LETTER K WITH CEDILLA)\n\n\n\t- 0x0139 (LATIN CAPITAL LETTER L WITH ACUTE)\n\n\n\t- 0x013D (LATIN CAPITAL LETTER L WITH CARON)\n\n\n\t- 0x013B (LATIN CAPITAL LETTER L WITH CEDILLA)\n\n\n\t- 0x0147 (LATIN CAPITAL LETTER N WITH CARON)\n\n\n\t- 0x0145 (LATIN CAPITAL LETTER N WITH CEDILLA)\n\n\n\t- 0x014A (LATIN CAPITAL LETTER ENG)\n\n\n\t- 0x0150 (LATIN CAPITAL LETTER O WITH DOUBLE ACUTE)\n\n\n\t- 0x014C (LATIN CAPITAL LETTER O WITH MACRON)\n\n\n\t- 0x015A (LATIN CAPITAL LETTER S WITH ACUTE)\n\n\n\t- 0x0160 (LATIN CAPITAL LETTER S WITH CARON)\n\n\n\t- 0x015E (LATIN CAPITAL LETTER S WITH CEDILLA)\n\n\n\t- 0x0218 (LATIN CAPITAL LETTER S WITH COMMA BELOW)\n\n\n\t- 0x1E9E (LATIN CAPITAL LETTER SHARP S)\n\n\n\t- 0x0164 (LATIN CAPITAL LETTER T WITH CARON)\n\n\n\t- 0x021A (LATIN CAPITAL LETTER T WITH COMMA BELOW)\n\n\n\t- 0x016C (LATIN CAPITAL LETTER U WITH BREVE)\n\n\n\t- 0x0170 (LATIN CAPITAL LETTER U WITH DOUBLE ACUTE)\n\n\n\t- 0x016A (LATIN CAPITAL LETTER U WITH MACRON)\n\n\n\t- 0x0172 (LATIN CAPITAL LETTER U WITH OGONEK)\n\n\n\t- 0x016E (LATIN CAPITAL LETTER U WITH RING ABOVE)\n\n\n\t- 0x1E82 (LATIN CAPITAL LETTER W WITH ACUTE)\n\n\n\t- 0x0174 (LATIN CAPITAL LETTER W WITH CIRCUMFLEX)\n\n\n\t- 0x1E84 (LATIN CAPITAL LETTER W WITH DIAERESIS)\n\n\n\t- 0x1E80 (LATIN CAPITAL LETTER W WITH GRAVE)\n\n\n\t- 0x0176 (LATIN CAPITAL LETTER Y WITH CIRCUMFLEX)\n\n\n\t- 0x0178 (LATIN CAPITAL LETTER Y WITH DIAERESIS)\n\n\n\t- 0x1EF2 (LATIN CAPITAL LETTER Y WITH GRAVE)\n\n\n\t- 0x0179 (LATIN CAPITAL LETTER Z WITH ACUTE)\n\n\n\t- 0x017D (LATIN CAPITAL LETTER Z WITH CARON)\n\n\n\t- 0x017B (LATIN CAPITAL LETTER Z WITH DOT ABOVE)\n\n\n\t- 0x0103 (LATIN SMALL LETTER A WITH BREVE)\n\n\n\t- 0x0101 (LATIN SMALL LETTER A WITH MACRON)\n\n\n\t- 0x0105 (LATIN SMALL LETTER A WITH OGONEK)\n\n\n\t- 0x0107 (LATIN SMALL LETTER C WITH ACUTE)\n\n\n\t- 0x010D (LATIN SMALL LETTER C WITH CARON)\n\n\n\t- 0x010B (LATIN SMALL LETTER C WITH DOT ABOVE)\n\n\n\t- 0x010F (LATIN SMALL LETTER D WITH CARON)\n\n\n\t- 0x0111 (LATIN SMALL LETTER D WITH STROKE)\n\n\n\t- 0x011B (LATIN SMALL LETTER E WITH CARON)\n\n\n\t- 0x0117 (LATIN SMALL LETTER E WITH DOT ABOVE)\n\n\n\t- 0x0113 (LATIN SMALL LETTER E WITH MACRON)\n\n\n\t- 0x0119 (LATIN SMALL LETTER E WITH OGONEK)\n\n\n\t- 0x011F (LATIN SMALL LETTER G WITH BREVE)\n\n\n\t- 0x0123 (LATIN SMALL LETTER G WITH CEDILLA)\n\n\n\t- 0x0121 (LATIN SMALL LETTER G WITH DOT ABOVE)\n\n\n\t- 0x012B (LATIN SMALL LETTER I WITH MACRON)\n\n\n\t- 0x012F (LATIN SMALL LETTER I WITH OGONEK)\n\n\n\t- 0x013A (LATIN SMALL LETTER L WITH ACUTE)\n\n\n\t- 0x013E (LATIN SMALL LETTER L WITH CARON)\n\n\n\t- 0x013C (LATIN SMALL LETTER L WITH CEDILLA)\n\n\n\t- 0x0148 (LATIN SMALL LETTER N WITH CARON)\n\n\n\t- 0x0146 (LATIN SMALL LETTER N WITH CEDILLA)\n\n\n\t- 0x014B (LATIN SMALL LETTER ENG)\n\n\n\t- 0x0151 (LATIN SMALL LETTER O WITH DOUBLE ACUTE)\n\n\n\t- 0x014D (LATIN SMALL LETTER O WITH MACRON)\n\n\n\t- 0x0155 (LATIN SMALL LETTER R WITH ACUTE)\n\n\n\t- 0x015B (LATIN SMALL LETTER S WITH ACUTE)\n\n\n\t- 0x0161 (LATIN SMALL LETTER S WITH CARON)\n\n\n\t- 0x015F (LATIN SMALL LETTER S WITH CEDILLA)\n\n\n\t- 0x0219 (LATIN SMALL LETTER S WITH COMMA BELOW)\n\n\n\t- 0x0165 (LATIN SMALL LETTER T WITH CARON)\n\n\n\t- 0x021B (LATIN SMALL LETTER T WITH COMMA BELOW)\n\n\n\t- 0x016D (LATIN SMALL LETTER U WITH BREVE)\n\n\n\t- 0x0171 (LATIN SMALL LETTER U WITH DOUBLE ACUTE)\n\n\n\t- 0x016B (LATIN SMALL LETTER U WITH MACRON)\n\n\n\t- 0x0173 (LATIN SMALL LETTER U WITH OGONEK)\n\n\n\t- 0x016F (LATIN SMALL LETTER U WITH RING ABOVE)\n\n\n\t- 0x1E83 (LATIN SMALL LETTER W WITH ACUTE)\n\n\n\t- 0x0175 (LATIN SMALL LETTER W WITH CIRCUMFLEX)\n\n\n\t- 0x1E85 (LATIN SMALL LETTER W WITH DIAERESIS)\n\n\n\t- 0x1E81 (LATIN SMALL LETTER W WITH GRAVE)\n\n\n\t- 0x0177 (LATIN SMALL LETTER Y WITH CIRCUMFLEX)\n\n\n\t- 0x1EF3 (LATIN SMALL LETTER Y WITH GRAVE)\n\n\n\t- 0x017A (LATIN SMALL LETTER Z WITH ACUTE)\n\n\n\t- 0x017E (LATIN SMALL LETTER Z WITH CARON)\n\n\n\t- 0x017C (LATIN SMALL LETTER Z WITH DOT ABOVE)\n\n\n\t- 0x2122 (TRADE MARK SIGN)\n\n\n\t- 0x2212 (MINUS SIGN)\n\n\n\t- 0x0302 (COMBINING CIRCUMFLEX ACCENT)\n\n\n\t- 0x030C (COMBINING CARON)\n\n\n\t- 0x0306 (COMBINING BREVE)\n\n\n\t- 0x030A (COMBINING RING ABOVE)\n\n\n\t- 0x0303 (COMBINING TILDE)\n\n\n\t- 0x0312 (COMBINING TURNED COMMA ABOVE)\n\n\n\t- 0x0326 (COMBINING COMMA BELOW)\n\n\n\t- 0x0327 (COMBINING CEDILLA)\n\n\n\t- 0x0328 (COMBINING OGONEK)\n\n\n\t- 0x02DD (DOUBLE ACUTE ACCENT)\n\n\n\t- 0x02D8 (BREVE)\n\n\n\t- 0x02DB (OGONEK)\n [code: missing-codepoints]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "FAIL" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+0001 : try adding symbols\n * U+0002 : try adding symbols\n * U+0003 : try adding symbols\n * U+0004 : try adding symbols\n * U+0005 : try adding symbols\n * U+0006 : try adding symbols\n * U+0007 : try adding symbols\n * U+0008 : try adding symbols\n * U+0009 : try adding symbols\n * U+0010 : try adding symbols\n * U+0011 : try adding symbols\n * U+0012 : try adding symbols\n * U+0013 : try adding symbols\n * U+0014 : try adding symbols\n * U+0015 : try adding symbols\n * U+0016 : try adding symbols\n * U+0017 : try adding symbols\n * U+0018 : try adding symbols\n * U+0019 : try adding symbols\n * U+0127 LATIN SMALL LETTER H WITH STROKE: try adding latin-ext\n * U+0128 LATIN CAPITAL LETTER I WITH TILDE: try adding one of: latin-ext, vietnamese\n * U+0129 LATIN SMALL LETTER I WITH TILDE: try adding one of: latin-ext, vietnamese\n * U+0132 LATIN CAPITAL LIGATURE IJ: try adding latin-ext\n * U+0133 LATIN SMALL LIGATURE IJ: try adding latin-ext\n * U+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX: try adding latin-ext\n * U+0135 LATIN SMALL LETTER J WITH CIRCUMFLEX: try adding latin-ext\n * U+0137 LATIN SMALL LETTER K WITH CEDILLA: try adding latin-ext\n * U+0138 LATIN SMALL LETTER KRA: try adding latin-ext\n * U+013F LATIN CAPITAL LETTER L WITH MIDDLE DOT: try adding latin-ext\n * U+0140 LATIN SMALL LETTER L WITH MIDDLE DOT: try adding latin-ext\n * U+0141 LATIN CAPITAL LETTER L WITH STROKE: try adding latin-ext\n * U+0142 LATIN SMALL LETTER L WITH STROKE: try adding latin-ext\n * U+0143 LATIN CAPITAL LETTER N WITH ACUTE: try adding latin-ext\n * U+0144 LATIN SMALL LETTER N WITH ACUTE: try adding latin-ext\n * U+0154 LATIN CAPITAL LETTER R WITH ACUTE: try adding latin-ext\n * U+0156 LATIN CAPITAL LETTER R WITH CEDILLA: try adding latin-ext\n * U+0157 LATIN SMALL LETTER R WITH CEDILLA: try adding latin-ext\n * U+0158 LATIN CAPITAL LETTER R WITH CARON: try adding latin-ext\n * U+0159 LATIN SMALL LETTER R WITH CARON: try adding latin-ext\n * U+0237 LATIN SMALL LETTER DOTLESS J: try adding latin-ext\n * U+02C7 CARON: try adding one of: tifinagh, yi, canadian-aboriginal\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, tifinagh, tai-le, coptic, syriac, old-permic, canadian-aboriginal, malayalam\n * U+F6C3 : not included in any glyphset definition\n\nOr you can add the above codepoints to one of the subsets supported by the font: `latin`, `menu` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2011 by ralph du carrois, with reserved font name 'carrois'\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + }, + { + "message": "Licensing entry on name table is correctly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=14] [code: http-in-license-info]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=14] [code: http-in-license-info]", + "status": "WARN", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + }, + { + "message": "Font has a valid license URL in NAME table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All description name records have reasonably small lengths.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "PASS" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 25.4kb |\n | Hinted Size | 39.4kb |\n | Increase | 14.0kb |\n | Change | 55.0 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 1.002', 'Version 1.002'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 8:\n\tflag = 0x0A\n\t- Use grayscale rendering\n\t- Use smoothing along multiple axes with ClearType\u00ae\nPPM <= 20:\n\tflag = 0x0B\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use smoothing along multiple axes with ClearType\u00ae\nPPM <= 96:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\nPPM <= 65535:\n\tflag = 0x0A\n\t- Use grayscale rendering\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The gasp table has a range of 8 that may be unneccessary. [code: non-ffff-range]", + "status": "WARN", + "traceback": null + }, + { + "message": "The gasp table has a range of 20 that may be unneccessary. [code: non-ffff-range]", + "status": "WARN", + "traceback": null + }, + { + "message": "The gasp table has a range of 96 that may be unneccessary. [code: non-ffff-range]", + "status": "WARN", + "traceback": null + }, + { + "message": "The gasp range 0xFFFF value 0x0A should be set to 0x0F. [code: unset-flags]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "WARN" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: listed_on_gfonts_api", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "SKIP" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Carrois Gothic SC\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"CarroisGothicSC-Regular\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Carrois Gothic SC Regular\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Carrois Gothic SC Regular\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Carrois Gothic SC\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Carrois Gothic SC\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Carrois Gothic SC\" in \"Carrois Gothic SC Regular\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Carrois Gothic SC\" in \"Carrois Gothic SC Regular\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011 by ralph du carrois, with reserved font name 'carrois'\" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011 by Ralph du Carrois, with Reserved Font Name 'Carrois'\" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011 by Ralph du Carrois, with Reserved Font Name 'Carrois'\" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011 by Ralph du Carrois, with Reserved Font Name 'Carrois'\") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to italic fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.style \"normal\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 1000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs are similar in comparison to the Google Fonts version.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Carrois Gothic SC | Carrois Gothic SC |\n| Subfamily Name | Regular | Regular |\n| Full Name | Carrois Gothic SC Regular | Carrois Gothic SC Regular |\n| Poscript Name | CarroisGothicSC-Regular | CarroisGothicSC-Regular |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 1.002\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "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]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "FAIL" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "None of the name table strings contain \"Reserved Font Name\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "PASS" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Carrois\\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011 by Ralph du Carrois, with Reserved Font Name \\'Carrois\\''. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "PASS" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "PASS" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"carroisgothicsc\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Carrois Gothic SC)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "FAIL": 8, + "INFO": 5, + "PASS": 87, + "SKIP": 28, + "WARN": 9 + } + }, + { + "checks": [ + { + "description": "Checking all files are in the same directory.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "All files are in the same directory.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the set of font files passed in the command line is not all in the\n same directory, then we warn the user since the tool will interpret the\n set of files as belonging to a single family (and it is unlikely that\n the user would store the files from a single family spreaded\n in several separate directories).\n ", + "result": "PASS" + }, + { + "description": "Each font in a family must have the same set of vertical metrics values.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Vertical metrics are the same across the family.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want all fonts within a family to have the same vertical metrics so\n their line spacing is consistent across the family.\n ", + "result": "PASS" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No trailing spaces on name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyph 0x00A0 is called \"nonbreakingspace\": Change to \"uni00A0\" [code: not-recommended-00a0]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "WARN" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- gasp\n\n\t- hdmx\n\n\t- LTSH [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyph names are all valid.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "PASS" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyph names are all unique.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "PASS" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothic [code: family-path]", + "status": "INFO", + "traceback": null + }, + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics are the same across the super-family.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "PASS" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- dotaccentcmb.cap\n\n\t- foundryicon\n\n\t- nonmarkingreturn\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: b\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: e\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: g\tContours detected: 1\tExpected: 2 or 3\n\n\t- Glyph name: i\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: j\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: r\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: uni00AD\tContours detected: 1\tExpected: 0\n\n\t- Glyph name: germandbls\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: aring\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: ae\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: egrave\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: eacute\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: ecircumflex\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: edieresis\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: hbar\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: ij\tContours detected: 2\tExpected: 3 or 4\n\n\t- Glyph name: oe\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: rcommaaccent\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: rcaron\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: ae\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: aring\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: b\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: e\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: eacute\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: ecircumflex\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: edieresis\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: egrave\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: g\tContours detected: 1\tExpected: 2 or 3\n\n\t- Glyph name: germandbls\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: hbar\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: i\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: ij\tContours detected: 2\tExpected: 3 or 4\n\n\t- Glyph name: j\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: oe\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: r\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: rcaron\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni00AD\tContours detected: 1\tExpected: 0\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No glyphs had components with scaling or rotation", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "PASS" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "PASS" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "INFO": 2, + "PASS": 22, + "SKIP": 5, + "WARN": 4 + } + }, + { + "checks": [ + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 3 + } + }, + { + "checks": [ + { + "description": "Fonts have equal unicode encodings?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have equal unicode encodings.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "Make sure all font files have the same version value.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "All font files have the same version.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3, + "SKIP": 1 + } + }, + { + "checks": [ + { + "description": "Fonts have consistent PANOSE proportion?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent PANOSE proportion.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Fonts have consistent PANOSE family type?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent PANOSE family type.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that OS/2.fsSelection bold & italic settings are unique for each NameID1", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "The OS/2.fsSelection bold & italic settings were unique within each compatible family group.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec: name ID 1 'is used in combination with Font Subfamily\n name (name ID 2), and should be shared among at most four fonts that differ\n only in weight or style.\n\n This four-way distinction should also be reflected in the OS/2.fsSelection\n field, using bits 0 and 5.\n ", + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 7, + "SKIP": 1 + } + }, + { + "checks": [ + { + "description": "Fonts have consistent underline thickness?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent underline thickness.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Dave C Lemon (Adobe Type Team) recommends setting the underline thickness to be\n consistent across the family.\n\n If thicknesses are not family consistent, words set on the same line which have\n different styles look strange.\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has an acceptable post format 2.0 table version.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "PASS" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is 0.0 with style=\"Regular\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3 + } + }, + { + "checks": [ + { + "description": "Verify that each group of fonts with the same nameID 1 has maximum of 4 fonts.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "There were no more than 4 fonts per family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec:\n\n 'The Font Family name [...] should be shared among at most four fonts that\n differ only in weight or style [...]'\n ", + "result": "PASS" + }, + { + "description": "Verify that family names in the name table are consistent across all fonts in the family. Checks Typographic Family name (nameID 16) if present, otherwise uses Font Family name (nameID 1)", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Font family names are consistent across the family.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec:\n * \"...many existing applications that use this pair of names assume that a\n Font Family name is shared by at most four fonts that form a font\n style-linking group\"\n * \"For extended typographic families that includes fonts other than the\n four basic styles(regular, italic, bold, bold italic), it is strongly\n recommended that name IDs 16 and 17 be used in fonts to create an\n extended, typographic grouping.\"\n * \"If name ID 16 is absent, then name ID 1 is considered to be the\n typographic family name.\"\n\n https://learn.microsoft.com/en-us/typography/opentype/spec/name\n\n Fonts within a font family all must have consistent names\n in the Typographic Family name (nameID 16)\n or Font Family name (nameID 1), depending on which it uses.\n\n Inconsistent font/typographic family names across fonts in a family\n can result in unexpected behaviors, such as broken style linking.\n ", + "result": "PASS" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font is not Italic.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 9, + "SKIP": 2 + } + }, + { + "checks": [ + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 2 + } + }, + { + "checks": [ + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly.\nThe current recommendation is to completely remove the DSIG table. [code: found-DSIG]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "WARN" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "WARN": 1 + } + }, + { + "checks": [ + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 3 + } + }, + { + "checks": [ + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3 + } + }, + { + "checks": [ + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 16 + } + }, + { + "checks": [ + { + "description": "Ensure VFs have 'ital' STAT axis.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check that related Upright and Italic VFs have a\n 'ital' axis in STAT table.\n ", + "result": "PASS" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1, + "SKIP": 4 + } + }, + { + "checks": [ + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3 + } + }, + { + "checks": [ + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/carroisgothicsc/CarroisGothicSC-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "It is not clear if the soft dotted characters have glyphs with dots.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "SKIP", + "severity": 3 + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 5 + } + } + ] +} \ No newline at end of file diff --git a/docs/fontbakery-reports/carroisgothicsc/GoogleFonts.json b/docs/fontbakery-reports/carroisgothicsc/GoogleFonts.json new file mode 100644 index 00000000..f74b30c2 --- /dev/null +++ b/docs/fontbakery-reports/carroisgothicsc/GoogleFonts.json @@ -0,0 +1,7 @@ +{ + "color": "green", + "label": "Google Fonts", + "logoSvg": "", + "message": "81%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/carroisgothicsc/ShapingChecks.json b/docs/fontbakery-reports/carroisgothicsc/ShapingChecks.json new file mode 100644 index 00000000..97e1be33 --- /dev/null +++ b/docs/fontbakery-reports/carroisgothicsc/ShapingChecks.json @@ -0,0 +1,7 @@ +{ + "color": "inactive", + "label": "Shaping Checks", + "logoSvg": "", + "message": "SKIP", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/carroisgothicsc/Universal.json b/docs/fontbakery-reports/carroisgothicsc/Universal.json new file mode 100644 index 00000000..d7031c35 --- /dev/null +++ b/docs/fontbakery-reports/carroisgothicsc/Universal.json @@ -0,0 +1,7 @@ +{ + "color": "green", + "label": "Universal", + "logoSvg": "", + "message": "80%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/carroisgothicsc/overall.json b/docs/fontbakery-reports/carroisgothicsc/overall.json new file mode 100644 index 00000000..b0926a32 --- /dev/null +++ b/docs/fontbakery-reports/carroisgothicsc/overall.json @@ -0,0 +1,7 @@ +{ + "color": "green", + "label": "FontBakery QA", + "logoSvg": "", + "message": "84%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/crimsonpro-report.html b/docs/fontbakery-reports/crimsonpro-report.html new file mode 100644 index 00000000..ae62564c --- /dev/null +++ b/docs/fontbakery-reports/crimsonpro-report.html @@ -0,0 +1,540 @@ + + + + + FontBakery Check Report + + + +
+ +
+ Fontbakery Technical Report +
+
+ +
+

If you think a check is flawed or have an idea for a check, please file an issue at https://github.com/fonttools/fontbakery/issues and remember to include a pointer to the repo and branch you're checking.

+

Summary

+ + + + + + + + + + + + + + + + + + + + + + + + + +
💥 ERROR🔥 FAIL⚠️ WARN⏩ SKIPℹ️ INFO✅ PASS
04246917351
0%1%6%18%5%93%
+ +

Note: The following loglevels were omitted in this report: SKIP, INFO, PASS, DEBUG

+ +

Meaning of check results:

+ +
    +
  • 💥 An ERROR is something wrong with FontBakery itself, possibly a bug. +
  • 🔥 A FAIL is a problem with the font that must be fixed. +
  • ⚠️ A WARN is something that you should consider addressing. +
  • ℹ️ An INFO result simply prints something useful. Typically stats. +
  • ✅ A PASS means the font looks good for the given checking routine. +
  • ⏩ And a SKIP happens when the check does not apply to the given font. +
+ +

If you get ERRORs, please help us improve the tool by reporting them at our + issue tracker.

+ +

(but other kinds of bug reports and/or feature requests + are also always welcome, of course!)

+ +

FontBakery version: 0.9.2

+ +

Section: Google Fonts

+🔥🔥⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ +

Check Google Fonts glyph coverage.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/glyph_coverage>
+ +
⚠️ CrimsonPro[wght].ttf
  • ⚠️ WARN

    GF_TransLatin_Arabic is almost fulfilled. Missing codepoints:

    +
    - 0x1E34 (LATIN CAPITAL LETTER K WITH LINE BELOW)
    +
    +
    +- 0x1E35 (LATIN SMALL LETTER K WITH LINE BELOW)
    +
    +
    +- 0x1E96 (LATIN SMALL LETTER H WITH LINE BELOW)
    +
    +
    +- 0x02BD (MODIFIER LETTER REVERSED COMMA)
    +
    +

    [code: missing-codepoints]

    +
+
⚠️ CrimsonPro-Italic[wght].ttf
  • ⚠️ WARN

    GF_TransLatin_Arabic is almost fulfilled. Missing codepoints:

    +
    - 0x1E34 (LATIN CAPITAL LETTER K WITH LINE BELOW)
    +
    +
    +- 0x1E35 (LATIN SMALL LETTER K WITH LINE BELOW)
    +
    +
    +- 0x1E96 (LATIN SMALL LETTER H WITH LINE BELOW)
    +
    +
    +- 0x02BD (MODIFIER LETTER REVERSED COMMA)
    +
    +

    [code: missing-codepoints]

    +
+

Check for codepoints not covered by METADATA subsets.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/unreachable_subsetting>
+ +
⚠️ CrimsonPro[wght].ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: canadian-aboriginal, yi, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: canadian-aboriginal, yi
    • +
    • U+02D9 DOT ABOVE: try adding one of: canadian-aboriginal, yi
    • +
    • U+02DB OGONEK: try adding one of: canadian-aboriginal, yi
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: tifinagh, coptic, cherokee, math
    • +
    • U+0306 COMBINING BREVE: try adding one of: old-permic, tifinagh
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: malayalam, old-permic, tifinagh, syriac, canadian-aboriginal, tai-le, math, coptic
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: cherokee, osage
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: cherokee, syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: tifinagh, cherokee, syriac, caucasian-albanian, gothic
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0394 GREEK CAPITAL LETTER DELTA: try adding one of: greek, elbasan, math
    • +
    • U+03A3 GREEK CAPITAL LETTER SIGMA: try adding one of: greek, elbasan, math
    • +
    • U+03A9 GREEK CAPITAL LETTER OMEGA: try adding one of: greek, elbasan, math
    • +
    • U+03BC GREEK SMALL LETTER MU: try adding one of: greek, math
    • +
    • U+03C0 GREEK SMALL LETTER PI: try adding one of: yi, greek, math
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+2010 HYPHEN: try adding one of: syloti-nagri, lisu, kaithi, sundanese, kharoshthi, sora-sompeng, yi, coptic, cham, kayah-li
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2052 COMMERCIAL MINUS SIGN: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+2116 NUMERO SIGN: try adding cyrillic
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+2205 EMPTY SET: try adding math
    • +
    • U+2206 INCREMENT: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: tai-tham, yi, symbols, math
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+25CA LOZENGE: try adding one of: symbols, math
    • +
    • U+2619 REVERSED ROTATED FLORAL HEART BULLET: try adding symbols
    • +
    • U+2767 ROTATED FLORAL HEART BULLET: try adding symbols
    • +
    • U+27E8 MATHEMATICAL LEFT ANGLE BRACKET: try adding math
    • +
    • U+27E9 MATHEMATICAL RIGHT ANGLE BRACKET: try adding math
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ CrimsonPro-Italic[wght].ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: canadian-aboriginal, yi, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: canadian-aboriginal, yi
    • +
    • U+02D9 DOT ABOVE: try adding one of: canadian-aboriginal, yi
    • +
    • U+02DB OGONEK: try adding one of: canadian-aboriginal, yi
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: tifinagh, coptic, cherokee, math
    • +
    • U+0306 COMBINING BREVE: try adding one of: old-permic, tifinagh
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: malayalam, old-permic, tifinagh, syriac, canadian-aboriginal, tai-le, math, coptic
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: cherokee, osage
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: cherokee, syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: tifinagh, cherokee, syriac, caucasian-albanian, gothic
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0394 GREEK CAPITAL LETTER DELTA: try adding one of: greek, elbasan, math
    • +
    • U+03A3 GREEK CAPITAL LETTER SIGMA: try adding one of: greek, elbasan, math
    • +
    • U+03A9 GREEK CAPITAL LETTER OMEGA: try adding one of: greek, elbasan, math
    • +
    • U+03BC GREEK SMALL LETTER MU: try adding one of: greek, math
    • +
    • U+03C0 GREEK SMALL LETTER PI: try adding one of: yi, greek, math
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+2010 HYPHEN: try adding one of: syloti-nagri, lisu, kaithi, sundanese, kharoshthi, sora-sompeng, yi, coptic, cham, kayah-li
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2052 COMMERCIAL MINUS SIGN: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+2116 NUMERO SIGN: try adding cyrillic
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+2205 EMPTY SET: try adding math
    • +
    • U+2206 INCREMENT: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: tai-tham, yi, symbols, math
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+25CA LOZENGE: try adding one of: symbols, math
    • +
    • U+2619 REVERSED ROTATED FLORAL HEART BULLET: try adding symbols
    • +
    • U+2767 ROTATED FLORAL HEART BULLET: try adding symbols
    • +
    • U+27E8 MATHEMATICAL LEFT ANGLE BRACKET: try adding math
    • +
    • U+27E9 MATHEMATICAL RIGHT ANGLE BRACKET: try adding math
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+

METADATA.pb: Check URL on copyright string is the same as in repository_url field.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/consistent_repo_urls>
+ +
🔥 CrimsonPro[wght].ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: https://github.com/Fonthausen/CrimsonPro and https://github.com/Fonthausen/CrimsonPro +[code: mismatch]

    +
+
🔥 CrimsonPro-Italic[wght].ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: https://github.com/Fonthausen/CrimsonPro and https://github.com/Fonthausen/CrimsonPro +[code: mismatch]

    +
+

Are there caret positions declared for every ligature?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/ligature_carets>
+ +
⚠️ CrimsonPro[wght].ttf
  • ⚠️ WARN

    This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]

    +
+
⚠️ CrimsonPro-Italic[wght].ttf
  • ⚠️ WARN

    This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]

    +
+

Is there kerning info for non-ligated sequences?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/kerning_for_non_ligated_sequences>
+ +
⚠️ CrimsonPro[wght].ttf
  • ⚠️ WARN

    GPOS table lacks kerning info for the following non-ligated sequences:

    +
    - f + i
    +
    +- i + l [code: lacks-kern-info]
    +
    +
+
⚠️ CrimsonPro-Italic[wght].ttf
  • ⚠️ WARN

    GPOS table lacks kerning info for the following non-ligated sequences:

    +
    - f + i
    +
    +- i + l [code: lacks-kern-info]
    +
    +
+

A static fonts directory with at least two fonts must accompany variable fonts

+
Check ID: <FontBakeryCheck:com.google.fonts/check/repo/vf_has_static_fonts>
+ +
⚠️ CrimsonPro[wght].ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ CrimsonPro-Italic[wght].ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+

On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/description/family_update>
+ +
⚠️ CrimsonPro-Italic[wght].ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+

Ensure fonts have ScriptLangTags declared on the 'meta' table.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/meta/script_lang_tags>
+ +
⚠️ CrimsonPro[wght].ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ CrimsonPro-Italic[wght].ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+

Section: Universal

+⚠️⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩ℹ️ℹ️ℹ️ℹ️ +

Check font contains no unreachable glyphs

+
Check ID: <FontBakeryCheck:com.google.fonts/check/unreachable_glyphs>
+ +
⚠️ CrimsonPro[wght].ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - j.alt
    +
    +- uni006A0301.alt
    +
    +- uni0326.alt
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ CrimsonPro-Italic[wght].ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - j.alt
    +
    +- uni006A0301.alt
    +
    +- uni0326.alt
    +
    +

    [code: unreachable-glyphs]

    +
+

Does the font contain a soft hyphen?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/soft_hyphen>
+ +
⚠️ CrimsonPro[wght].ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ CrimsonPro-Italic[wght].ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+

Detect any interpolation issues in the font.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/interpolation_issues>
+ +
⚠️ CrimsonPro[wght].ttf
  • ⚠️ WARN

    Interpolation issues were found in the font: - Contour 1 start point differs in glyph 'uni20B2.BRACKET.700' between location <fontTools.ttLib.ttGlyphSet._TTGlyphSetGlyf object at 0x7f91afb3b7c0> and location <fontTools.ttLib.ttGlyphSet._TTGlyphSetGlyf object at 0x7f91afb3b760>

    +
    - Contour 2 start point differs in glyph 'uni20B2.BRACKET.700' between location <fontTools.ttLib.ttGlyphSet._TTGlyphSetGlyf object at 0x7f91afb3b7c0> and location <fontTools.ttLib.ttGlyphSet._TTGlyphSetGlyf object at 0x7f91afb3b760>
    +
    +- Contour 1 start point differs in glyph 'uni20B2.BRACKET.700' between location <fontTools.ttLib.ttGlyphSet._TTGlyphSetGlyf object at 0x7f91afb3b7c0> and location <fontTools.ttLib.ttGlyphSet._TTGlyphSetGlyf object at 0x7f91afb38c40>
    +
    +- Contour 2 start point differs in glyph 'uni20B2.BRACKET.700' between location <fontTools.ttLib.ttGlyphSet._TTGlyphSetGlyf object at 0x7f91afb3b7c0> and location <fontTools.ttLib.ttGlyphSet._TTGlyphSetGlyf object at 0x7f91afb38c40>
    +
    +- Contour 1 start point differs in glyph 'uni20B2.BRACKET.700' between location <fontTools.ttLib.ttGlyphSet._TTGlyphSetGlyf object at 0x7f91afb3b7c0> and location <fontTools.ttLib.ttGlyphSet._TTGlyphSetGlyf object at 0x7f91afb38cd0>
    +
    +- Contour 2 start point differs in glyph 'uni20B2.BRACKET.700' between location <fontTools.ttLib.ttGlyphSet._TTGlyphSetGlyf object at 0x7f91afb3b7c0> and location <fontTools.ttLib.ttGlyphSet._TTGlyphSetGlyf object at 0x7f91afb38cd0> [code: interpolation-issues]
    +
    +
+

Section: fontbakery.profiles.dsig

+⚠️⚠️ +

Does the font have a DSIG table?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/dsig>
+ +
⚠️ CrimsonPro[wght].ttf
  • ⚠️ WARN

    This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly. +The current recommendation is to completely remove the DSIG table. [code: found-DSIG]

    +
+
⚠️ CrimsonPro-Italic[wght].ttf
  • ⚠️ WARN

    This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly. +The current recommendation is to completely remove the DSIG table. [code: found-DSIG]

    +
+

Section: fontbakery.profiles.fvar

+🔥🔥⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩ +

Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.

+
Check ID: <FontBakeryCheck:com.adobe.fonts/check/varfont/valid_default_instance_nameids>
+ +
🔥 CrimsonPro[wght].ttf
  • 🔥 FAIL

    'Regular' instance has the same coordinates as the default instance; its postscript name should be 'CrimsonPro-Regular', instead of 'CrimsonProRoman-Regular'. [code: invalid-default-instance-postscript-name]

    +
+
🔥 CrimsonPro-Italic[wght].ttf
  • 🔥 FAIL

    'Italic' instance has the same coordinates as the default instance; its postscript name should be 'CrimsonPro-Italic', instead of 'CrimsonProItalic-Regular'. [code: invalid-default-instance-postscript-name]

    +
+

Section: Shaping Checks

+⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩⏩ +

Ensure dotted circle glyph is present and can attach marks.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/dotted_circle>
+ +
⚠️ CrimsonPro[wght].ttf
  • ⚠️ WARN

    No dotted circle glyph present [code: missing-dotted-circle]

    +
+
⚠️ CrimsonPro-Italic[wght].ttf
  • ⚠️ WARN

    No dotted circle glyph present [code: missing-dotted-circle]

    +
+

Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/soft_dotted>
+ +
⚠️ CrimsonPro[wght].ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: į̀ į́ į̂ į̃ į̄ į̌ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: į̆ į̇ į̈ į̉ į̊ į̋ į̏ į̑ į̒ į̶̀ į̶́ į̶̂ į̶̃ į̶̄ į̶̆ į̶̇ į̶̈ į̶̉ į̶̊ į̶̋

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Aghem (Latn, 38,843 speakers), Kom (Latn, 360,685 speakers), Dan (Latn, 1,099,244 speakers), Nateni (Latn, 100,000 speakers), Ejagham (Latn, 120,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lugbara (Latn, 2,200,000 speakers), Lithuanian (Latn, 2,357,094 speakers), Belarusian (Cyrl, 10,064,517 speakers), Basaa (Latn, 332,940 speakers), Koonzime (Latn, 40,000 speakers). [code: soft-dotted]

    +
+
⚠️ CrimsonPro-Italic[wght].ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: į̀ į́ į̂ į̃ į̄ į̌ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: į̆ į̇ į̈ į̉ į̊ į̋ į̏ į̑ į̒ į̶̀ į̶́ į̶̂ į̶̃ į̶̄ į̶̆ į̶̇ į̶̈ į̶̉ į̶̊ į̶̋

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Aghem (Latn, 38,843 speakers), Kom (Latn, 360,685 speakers), Dan (Latn, 1,099,244 speakers), Nateni (Latn, 100,000 speakers), Ejagham (Latn, 120,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lugbara (Latn, 2,200,000 speakers), Lithuanian (Latn, 2,357,094 speakers), Belarusian (Cyrl, 10,064,517 speakers), Basaa (Latn, 332,940 speakers), Koonzime (Latn, 40,000 speakers). [code: soft-dotted]

    +
+
+ + \ No newline at end of file diff --git a/docs/fontbakery-reports/crimsonpro-report.json b/docs/fontbakery-reports/crimsonpro-report.json new file mode 100644 index 00000000..88404584 --- /dev/null +++ b/docs/fontbakery-reports/crimsonpro-report.json @@ -0,0 +1,10841 @@ +{ + "result": { + "FAIL": 4, + "INFO": 17, + "PASS": 351, + "SKIP": 69, + "WARN": 24 + }, + "sections": [ + { + "checks": [ + { + "description": "Ensure that all variable font files have the same set of axes and axis ranges.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "All looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to facilitate the construction of intuitive and friendly user\n interfaces, all variable font files in a given family should have the same set\n of variation axes. Also, each axis must have a consistent setting of min/max\n value ranges accross all the files.\n ", + "result": "PASS" + }, + { + "description": "All tabular figures must have the same width across the RIBBI-family.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tabular figures need to have the same metrics in all styles in order to allow\n tables to be set with proper typographic control, but to maintain the placement\n of decimals and numeric columns between rows.\n\n Here's a good explanation of this:\n https://www.typography.com/techniques/fonts-for-financials/#tabular-figs\n ", + "result": "PASS" + }, + { + "description": "Does font file include unacceptable control character glyphs?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Unacceptable control characters were not identified.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Use of some unacceptable control characters in the U+0000 - U+001F range can\n lead to rendering issues on some platforms.\n\n Acceptable control characters are defined as .null (U+0000) and\n CR (U+000D) for this test.\n ", + "result": "PASS" + }, + { + "description": "Ensure Italic styles have Roman counterparts.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For each font family on Google Fonts, every Italic style must have\n a Roman sibling.\n\n This kind of problem was first observed at [1] where the Bold style was\n missing but BoldItalic was included.\n\n [1] https://github.com/google/fonts/pull/1482\n ", + "result": "PASS" + }, + { + "description": "Check axis ordering on the STAT table.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "From a total of 2 font files, 0 of them (0.00%) lack a STAT table.\n\n\tAnd these are the most common STAT axis orderings:\n\t('wght-ital', 2) [code: summary]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is (for now) a merely informative check to detect what's the axis ordering\n declared on the STAT table of fonts in the Google Fonts collection.\n\n We may later update this to enforce some unified axis ordering scheme,\n yet to be determined.\n ", + "result": "INFO" + }, + { + "description": "Check README.md has a sample image.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: readme_contents, readme_directory", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n In order to showcase what a font family looks like, the project's README.md\n file should ideally include a sample image and highlight it in the upper\n portion of the document, no more than 10 lines away from the top of the file.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"CrimsonPro[wght].ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Found a git repo URL: https://github.com/Fonthausen/CrimsonPro [code: url-found]", + "status": "INFO", + "traceback": null + }, + { + "message": "Looks great!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "INFO" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID 'FoHa' looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "PASS" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "GF_TransLatin_Arabic is almost fulfilled. Missing codepoints:\n\n\t- 0x1E34 (LATIN CAPITAL LETTER K WITH LINE BELOW)\n\n\n\t- 0x1E35 (LATIN SMALL LETTER K WITH LINE BELOW)\n\n\n\t- 0x1E96 (LATIN SMALL LETTER H WITH LINE BELOW)\n\n\n\t- 0x02BD (MODIFIER LETTER REVERSED COMMA)\n [code: missing-codepoints]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "WARN" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: canadian-aboriginal, yi, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: canadian-aboriginal, yi\n * U+02D9 DOT ABOVE: try adding one of: canadian-aboriginal, yi\n * U+02DB OGONEK: try adding one of: canadian-aboriginal, yi\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: tifinagh, coptic, cherokee, math\n * U+0306 COMBINING BREVE: try adding one of: old-permic, tifinagh\n * U+0307 COMBINING DOT ABOVE: try adding one of: malayalam, old-permic, tifinagh, syriac, canadian-aboriginal, tai-le, math, coptic\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: cherokee, osage\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: cherokee, syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: tifinagh, cherokee, syriac, caucasian-albanian, gothic\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0394 GREEK CAPITAL LETTER DELTA: try adding one of: greek, elbasan, math\n * U+03A3 GREEK CAPITAL LETTER SIGMA: try adding one of: greek, elbasan, math\n * U+03A9 GREEK CAPITAL LETTER OMEGA: try adding one of: greek, elbasan, math\n * U+03BC GREEK SMALL LETTER MU: try adding one of: greek, math\n * U+03C0 GREEK SMALL LETTER PI: try adding one of: yi, greek, math\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+2010 HYPHEN: try adding one of: syloti-nagri, lisu, kaithi, sundanese, kharoshthi, sora-sompeng, yi, coptic, cham, kayah-li\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2052 COMMERCIAL MINUS SIGN: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+2116 NUMERO SIGN: try adding cyrillic\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+2205 EMPTY SET: try adding math\n * U+2206 INCREMENT: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: tai-tham, yi, symbols, math\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+25CA LOZENGE: try adding one of: symbols, math\n * U+2619 REVERSED ROTATED FLORAL HEART BULLET: try adding symbols\n * U+2767 ROTATED FLORAL HEART BULLET: try adding symbols\n * U+27E8 MATHEMATICAL LEFT ANGLE BRACKET: try adding math\n * U+27E9 MATHEMATICAL RIGHT ANGLE BRACKET: try adding math\n * U+F8FF : not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n\nOr you can add the above codepoints to one of the subsets supported by the font: `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "looks good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Licensing entry on name table is correctly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "PASS" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has a valid license URL in NAME table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All description name records have reasonably small lengths.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "PASS" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 240.5kb |\n | Hinted Size | 240.6kb |\n | Increase | 24 bytes |\n | Change | 0.0 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 1.003'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Crimson Pro\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"CrimsonPro-Regular\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Crimson Pro Regular\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Crimson Pro\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Crimson Pro\" in \"Crimson Pro Regular\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb copyright string is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright field 'Copyright 2018 The Crimson Pro Project Authors (https://github.com/Fonthausen/CrimsonPro)' matches canonical pattern.", + "status": "PASS", + "traceback": null + }, + { + "message": "Name table copyright entries are good", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb copyright field does not contain \"Reserved Font Name\".", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to italic fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.style \"normal\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: https://github.com/Fonthausen/CrimsonPro and https://github.com/Fonthausen/CrimsonPro\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 1024).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs are similar in comparison to the Google Fonts version.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has no slnt axis", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "PASS" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Crimson Pro | Crimson Pro |\n| Subfamily Name | Regular | Regular |\n| Full Name | Crimson Pro Regular | Crimson Pro Regular |\n| Poscript Name | CrimsonPro-Regular | CrimsonPro-Regular |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 1.003\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "fontTools.varLib.mutator generated a static font instance", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "PASS" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This variable font contains an HVAR table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "PASS" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Compulsory STAT Axis Values are correct.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "PASS" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "fvar instances are good:\n\n| Name | current | expected |\n| :--- | :--- | :--- |\n| ExtraLight | wght=200.0 | wght=200.0 |\n| Light | wght=300.0 | wght=300.0 |\n| Regular | wght=400.0 | wght=400.0 |\n| Medium | wght=500.0 | wght=500.0 |\n| SemiBold | wght=600.0 | wght=600.0 |\n| Bold | wght=700.0 | wght=700.0 |\n| ExtraBold | wght=800.0 | wght=800.0 |\n| Black | wght=900.0 | wght=900.0 |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "PASS" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "PASS" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_hinted", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "SKIP" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "WARN" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "GPOS table lacks kerning info for the following non-ligated sequences:\n\n\t- f + i\n\n\t- i + l [code: lacks-kern-info]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "WARN" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "None of the name table strings contain \"Reserved Font Name\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "PASS" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Instance names are unique", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "PASS" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "PASS" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font has no duplexed axes [code: no-relevant-axes]", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "PASS" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "PASS" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "PASS" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "PASS" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "PASS" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "PASS" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: github_gfonts_description", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "SKIP" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "PASS" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"crimsonpro\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Crimson Pro)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"CrimsonPro-Italic[wght].ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Found a git repo URL: https://github.com/Fonthausen/CrimsonPro [code: url-found]", + "status": "INFO", + "traceback": null + }, + { + "message": "Looks great!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "INFO" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID 'FoHa' looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "PASS" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "GF_TransLatin_Arabic is almost fulfilled. Missing codepoints:\n\n\t- 0x1E34 (LATIN CAPITAL LETTER K WITH LINE BELOW)\n\n\n\t- 0x1E35 (LATIN SMALL LETTER K WITH LINE BELOW)\n\n\n\t- 0x1E96 (LATIN SMALL LETTER H WITH LINE BELOW)\n\n\n\t- 0x02BD (MODIFIER LETTER REVERSED COMMA)\n [code: missing-codepoints]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "WARN" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: canadian-aboriginal, yi, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: canadian-aboriginal, yi\n * U+02D9 DOT ABOVE: try adding one of: canadian-aboriginal, yi\n * U+02DB OGONEK: try adding one of: canadian-aboriginal, yi\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: tifinagh, coptic, cherokee, math\n * U+0306 COMBINING BREVE: try adding one of: old-permic, tifinagh\n * U+0307 COMBINING DOT ABOVE: try adding one of: malayalam, old-permic, tifinagh, syriac, canadian-aboriginal, tai-le, math, coptic\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: cherokee, osage\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: cherokee, syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: tifinagh, cherokee, syriac, caucasian-albanian, gothic\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0394 GREEK CAPITAL LETTER DELTA: try adding one of: greek, elbasan, math\n * U+03A3 GREEK CAPITAL LETTER SIGMA: try adding one of: greek, elbasan, math\n * U+03A9 GREEK CAPITAL LETTER OMEGA: try adding one of: greek, elbasan, math\n * U+03BC GREEK SMALL LETTER MU: try adding one of: greek, math\n * U+03C0 GREEK SMALL LETTER PI: try adding one of: yi, greek, math\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+2010 HYPHEN: try adding one of: syloti-nagri, lisu, kaithi, sundanese, kharoshthi, sora-sompeng, yi, coptic, cham, kayah-li\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2052 COMMERCIAL MINUS SIGN: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+2116 NUMERO SIGN: try adding cyrillic\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+2205 EMPTY SET: try adding math\n * U+2206 INCREMENT: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: tai-tham, yi, symbols, math\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+25CA LOZENGE: try adding one of: symbols, math\n * U+2619 REVERSED ROTATED FLORAL HEART BULLET: try adding symbols\n * U+2767 ROTATED FLORAL HEART BULLET: try adding symbols\n * U+27E8 MATHEMATICAL LEFT ANGLE BRACKET: try adding math\n * U+27E9 MATHEMATICAL RIGHT ANGLE BRACKET: try adding math\n * U+F8FF : not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n\nOr you can add the above codepoints to one of the subsets supported by the font: `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "looks good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Licensing entry on name table is correctly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "PASS" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font has a valid license URL in NAME table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All description name records have reasonably small lengths.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "PASS" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 247.2kb |\n | Hinted Size | 247.2kb |\n | Increase | 24 bytes |\n | Change | 0.0 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 1.003'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Crimson Pro\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"CrimsonPro-Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Crimson Pro Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Crimson Pro\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Crimson Pro\" in \"Crimson Pro Italic\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Name ID 25 looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb copyright string is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright field 'Copyright 2018 The Crimson Pro Project Authors (https://github.com/Fonthausen/CrimsonPro)' matches canonical pattern.", + "status": "PASS", + "traceback": null + }, + { + "message": "Name table copyright entries are good", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb copyright field does not contain \"Reserved Font Name\".", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK: METADATA.pb font.style \"italic\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to normal fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: https://github.com/Fonthausen/CrimsonPro and https://github.com/Fonthausen/CrimsonPro\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 1024).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Glyphs are similar in comparison to the Google Fonts version.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font has no slnt axis", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "PASS" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Crimson Pro | Crimson Pro |\n| Subfamily Name | Italic | Italic |\n| Full Name | Crimson Pro Italic | Crimson Pro Italic |\n| Poscript Name | CrimsonPro-Italic | CrimsonPro-Italic |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 1.003\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "fontTools.varLib.mutator generated a static font instance", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "PASS" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "This variable font contains an HVAR table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "PASS" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Compulsory STAT Axis Values are correct.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "PASS" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "fvar instances are good:\n\n| Name | current | expected |\n| :--- | :--- | :--- |\n| ExtraLight Italic | wght=200.0 | wght=200.0 |\n| Light Italic | wght=300.0 | wght=300.0 |\n| Italic | wght=400.0 | wght=400.0 |\n| Medium Italic | wght=500.0 | wght=500.0 |\n| SemiBold Italic | wght=600.0 | wght=600.0 |\n| Bold Italic | wght=700.0 | wght=700.0 |\n| ExtraBold Italic | wght=800.0 | wght=800.0 |\n| Black Italic | wght=900.0 | wght=900.0 |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "PASS" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "PASS" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_hinted", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "SKIP" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "WARN" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "GPOS table lacks kerning info for the following non-ligated sequences:\n\n\t- f + i\n\n\t- i + l [code: lacks-kern-info]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "WARN" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "None of the name table strings contain \"Reserved Font Name\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "PASS" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Instance names are unique", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "PASS" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "PASS" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "This font has no duplexed axes [code: no-relevant-axes]", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "PASS" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "PASS" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "PASS" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "PASS" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "PASS" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "PASS" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "PASS" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"crimsonpro\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Crimson Pro)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "FAIL": 2, + "INFO": 13, + "PASS": 212, + "SKIP": 28, + "WARN": 13 + } + }, + { + "checks": [ + { + "description": "Checking all files are in the same directory.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "All files are in the same directory.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the set of font files passed in the command line is not all in the\n same directory, then we warn the user since the tool will interpret the\n set of files as belonging to a single family (and it is unlikely that\n the user would store the files from a single family spreaded\n in several separate directories).\n ", + "result": "PASS" + }, + { + "description": "Each font in a family must have the same set of vertical metrics values.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Vertical metrics are the same across the family.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want all fonts within a family to have the same vertical metrics so\n their line spacing is consistent across the family.\n ", + "result": "PASS" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No trailing spaces on name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has **AGL recommended** names for whitespace glyphs.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "PASS" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "PASS" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyph names are all valid.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "PASS" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyph names are all unique.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "PASS" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- j.alt\n\n\t- uni006A0301.alt\n\n\t- uni0326.alt\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No glyphs had components with scaling or rotation", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "PASS" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Interpolation issues were found in the font: \t- Contour 1 start point differs in glyph 'uni20B2.BRACKET.700' between location and location \n\n\t- Contour 2 start point differs in glyph 'uni20B2.BRACKET.700' between location and location \n\n\t- Contour 1 start point differs in glyph 'uni20B2.BRACKET.700' between location and location \n\n\t- Contour 2 start point differs in glyph 'uni20B2.BRACKET.700' between location and location \n\n\t- Contour 1 start point differs in glyph 'uni20B2.BRACKET.700' between location and location \n\n\t- Contour 2 start point differs in glyph 'uni20B2.BRACKET.700' between location and location [code: interpolation-issues]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "WARN", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "PASS" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "PASS" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No trailing spaces on name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font has **AGL recommended** names for whitespace glyphs.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "PASS" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "PASS" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Glyph names are all valid.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "PASS" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Glyph names are all unique.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "PASS" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- j.alt\n\n\t- uni006A0301.alt\n\n\t- uni0326.alt\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No glyphs had components with scaling or rotation", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "PASS" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No interpolation issues found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "PASS", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "PASS" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "INFO": 4, + "PASS": 45, + "SKIP": 10, + "WARN": 5 + } + }, + { + "checks": [ + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 6 + } + }, + { + "checks": [ + { + "description": "Fonts have equal unicode encodings?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have equal unicode encodings.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "Make sure all font files have the same version value.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "All font files have the same version.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 5, + "SKIP": 2 + } + }, + { + "checks": [ + { + "description": "Fonts have consistent PANOSE proportion?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent PANOSE proportion.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Fonts have consistent PANOSE family type?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent PANOSE family type.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that OS/2.fsSelection bold & italic settings are unique for each NameID1", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "The OS/2.fsSelection bold & italic settings were unique within each compatible family group.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec: name ID 1 'is used in combination with Font Subfamily\n name (name ID 2), and should be shared among at most four fonts that differ\n only in weight or style.\n\n This four-way distinction should also be reflected in the OS/2.fsSelection\n field, using bits 0 and 5.\n ", + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 11, + "SKIP": 2 + } + }, + { + "checks": [ + { + "description": "Fonts have consistent underline thickness?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent underline thickness.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Dave C Lemon (Adobe Type Team) recommends setting the underline thickness to be\n consistent across the family.\n\n If thicknesses are not family consistent, words set on the same line which have\n different styles look strange.\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has an acceptable post format 2.0 table version.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "PASS" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is 0.0 with style=\"Regular\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font has an acceptable post format 2.0 table version.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "PASS" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is -12.0 with style=\"Italic\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 5 + } + }, + { + "checks": [ + { + "description": "Verify that each group of fonts with the same nameID 1 has maximum of 4 fonts.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "There were no more than 4 fonts per family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec:\n\n 'The Font Family name [...] should be shared among at most four fonts that\n differ only in weight or style [...]'\n ", + "result": "PASS" + }, + { + "description": "Verify that family names in the name table are consistent across all fonts in the family. Checks Typographic Family name (nameID 16) if present, otherwise uses Font Family name (nameID 1)", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Font family names are consistent across the family.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec:\n * \"...many existing applications that use this pair of names assume that a\n Font Family name is shared by at most four fonts that form a font\n style-linking group\"\n * \"For extended typographic families that includes fonts other than the\n four basic styles(regular, italic, bold, bold italic), it is strongly\n recommended that name IDs 16 and 17 be used in fonts to create an\n extended, typographic grouping.\"\n * \"If name ID 16 is absent, then name ID 1 is considered to be the\n typographic family name.\"\n\n https://learn.microsoft.com/en-us/typography/opentype/spec/name\n\n Fonts within a font family all must have consistent names\n in the Typographic Family name (nameID 16)\n or Font Family name (nameID 1), depending on which it uses.\n\n Inconsistent font/typographic family names across fonts in a family\n can result in unexpected behaviors, such as broken style linking.\n ", + "result": "PASS" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font is not Italic.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "SKIP" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All font names are good for Italic fonts.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 17, + "SKIP": 3 + } + }, + { + "checks": [ + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 2 + } + }, + { + "checks": [ + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 4 + } + }, + { + "checks": [ + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly.\nThe current recommendation is to completely remove the DSIG table. [code: found-DSIG]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "WARN" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly.\nThe current recommendation is to completely remove the DSIG table. [code: found-DSIG]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "WARN" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "WARN": 2 + } + }, + { + "checks": [ + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not has spacing glyphs in the GDEF mark glyph class.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "PASS" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not have mark characters not in the GDEF mark glyph class.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "PASS" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not have non-mark characters in the GDEF mark glyph class.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "PASS" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font does not has spacing glyphs in the GDEF mark glyph class.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "PASS" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font does not have mark characters not in the GDEF mark glyph class.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "PASS" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font does not have non-mark characters in the GDEF mark glyph class.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 6 + } + }, + { + "checks": [ + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 2 + } + }, + { + "checks": [ + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 2 + } + }, + { + "checks": [ + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 6 + } + }, + { + "checks": [ + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Regular:wght is 400.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "PASS" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Bold:wght is 700.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "PASS" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "PASS" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All axisNameID values are valid.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "PASS" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All subfamilyNameID values are valid.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "PASS" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All postScriptNameID values are valid.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "PASS" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "'Regular' instance has the same coordinates as the default instance; its postscript name should be 'CrimsonPro-Regular', instead of 'CrimsonProRoman-Regular'. [code: invalid-default-instance-postscript-name]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "FAIL" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All instance records have the same size.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "PASS" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All instance records are distinct.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "PASS" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Axis tag 'wght' looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "PASS" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Regular:wght is 400.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "PASS" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Bold:wght is 700.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "PASS" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "PASS" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All axisNameID values are valid.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "PASS" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All subfamilyNameID values are valid.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "PASS" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All postScriptNameID values are valid.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "PASS" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "'Italic' instance has the same coordinates as the default instance; its postscript name should be 'CrimsonPro-Italic', instead of 'CrimsonProItalic-Regular'. [code: invalid-default-instance-postscript-name]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "FAIL" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All instance records have the same size.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "PASS" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All instance records are distinct.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "PASS" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Axis tag 'wght' looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "FAIL": 2, + "PASS": 18, + "SKIP": 12 + } + }, + { + "checks": [ + { + "description": "Ensure VFs have 'ital' STAT axis.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check that related Upright and Italic VFs have a\n 'ital' axis in STAT table.\n ", + "result": "PASS" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "STAT table has all necessary Axis Records.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "PASS" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "STAT table has Axis Value tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "PASS" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "STAT table ital axis values are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "PASS" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "STAT table ital axis order is good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "PASS" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "STAT table has all necessary Axis Records.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "PASS" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "STAT table has Axis Value tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "PASS" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "STAT table ital axis values are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "PASS" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "STAT table ital axis order is good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 9 + } + }, + { + "checks": [ + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 6 + } + }, + { + "checks": [ + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No dotted circle glyph present [code: missing-dotted-circle]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: \u012f\u0306 \u012f\u0307 \u012f\u0308 \u012f\u0309 \u012f\u030a \u012f\u030b \u012f\u030f \u012f\u0311 \u012f\u0312 \u012f\u0336\u0300 \u012f\u0336\u0301 \u012f\u0336\u0302 \u012f\u0336\u0303 \u012f\u0336\u0304 \u012f\u0336\u0306 \u012f\u0336\u0307 \u012f\u0336\u0308 \u012f\u0336\u0309 \u012f\u0336\u030a \u012f\u0336\u030b\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Aghem (Latn, 38,843 speakers), Kom (Latn, 360,685 speakers), Dan (Latn, 1,099,244 speakers), Nateni (Latn, 100,000 speakers), Ejagham (Latn, 120,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lugbara (Latn, 2,200,000 speakers), Lithuanian (Latn, 2,357,094 speakers), Belarusian (Cyrl, 10,064,517 speakers), Basaa (Latn, 332,940 speakers), Koonzime (Latn, 40,000 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No dotted circle glyph present [code: missing-dotted-circle]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/crimsonpro/CrimsonPro-Italic[wght].ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: \u012f\u0306 \u012f\u0307 \u012f\u0308 \u012f\u0309 \u012f\u030a \u012f\u030b \u012f\u030f \u012f\u0311 \u012f\u0312 \u012f\u0336\u0300 \u012f\u0336\u0301 \u012f\u0336\u0302 \u012f\u0336\u0303 \u012f\u0336\u0304 \u012f\u0336\u0306 \u012f\u0336\u0307 \u012f\u0336\u0308 \u012f\u0336\u0309 \u012f\u0336\u030a \u012f\u0336\u030b\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Aghem (Latn, 38,843 speakers), Kom (Latn, 360,685 speakers), Dan (Latn, 1,099,244 speakers), Nateni (Latn, 100,000 speakers), Ejagham (Latn, 120,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lugbara (Latn, 2,200,000 speakers), Lithuanian (Latn, 2,357,094 speakers), Belarusian (Cyrl, 10,064,517 speakers), Basaa (Latn, 332,940 speakers), Koonzime (Latn, 40,000 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 6, + "WARN": 4 + } + } + ] +} \ No newline at end of file diff --git a/docs/fontbakery-reports/crimsonpro/GoogleFonts.json b/docs/fontbakery-reports/crimsonpro/GoogleFonts.json new file mode 100644 index 00000000..ee849005 --- /dev/null +++ b/docs/fontbakery-reports/crimsonpro/GoogleFonts.json @@ -0,0 +1,7 @@ +{ + "color": "brightgreen", + "label": "Google Fonts", + "logoSvg": "", + "message": "90%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/crimsonpro/ShapingChecks.json b/docs/fontbakery-reports/crimsonpro/ShapingChecks.json new file mode 100644 index 00000000..1e5a3896 --- /dev/null +++ b/docs/fontbakery-reports/crimsonpro/ShapingChecks.json @@ -0,0 +1,7 @@ +{ + "color": "red", + "label": "Shaping Checks", + "logoSvg": "", + "message": "0%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/crimsonpro/Universal.json b/docs/fontbakery-reports/crimsonpro/Universal.json new file mode 100644 index 00000000..6f648a78 --- /dev/null +++ b/docs/fontbakery-reports/crimsonpro/Universal.json @@ -0,0 +1,7 @@ +{ + "color": "green", + "label": "Universal", + "logoSvg": "", + "message": "85%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/crimsonpro/overall.json b/docs/fontbakery-reports/crimsonpro/overall.json new file mode 100644 index 00000000..126f6a49 --- /dev/null +++ b/docs/fontbakery-reports/crimsonpro/overall.json @@ -0,0 +1,7 @@ +{ + "color": "brightgreen", + "label": "FontBakery QA", + "logoSvg": "", + "message": "90%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/lato-report.html b/docs/fontbakery-reports/lato-report.html new file mode 100644 index 00000000..01436e30 --- /dev/null +++ b/docs/fontbakery-reports/lato-report.html @@ -0,0 +1,27140 @@ + + + + + FontBakery Check Report + + + +
+ +
+ Fontbakery Technical Report +
+
+ +
+

If you think a check is flawed or have an idea for a check, please file an issue at https://github.com/fonttools/fontbakery/issues and remember to include a pointer to the repo and branch you're checking.

+

Summary

+ + + + + + + + + + + + + + + + + + + + + + + + + +
💥 ERROR🔥 FAIL⚠️ WARN⏩ SKIPℹ️ INFO✅ PASS
016033012251272207
0%5%10%37%4%68%
+ +

Note: The following loglevels were omitted in this report: SKIP, INFO, PASS, DEBUG

+ +

Meaning of check results:

+ +
    +
  • 💥 An ERROR is something wrong with FontBakery itself, possibly a bug. +
  • 🔥 A FAIL is a problem with the font that must be fixed. +
  • ⚠️ A WARN is something that you should consider addressing. +
  • ℹ️ An INFO result simply prints something useful. Typically stats. +
  • ✅ A PASS means the font looks good for the given checking routine. +
  • ⏩ And a SKIP happens when the check does not apply to the given font. +
+ +

If you get ERRORs, please help us improve the tool by reporting them at our + issue tracker.

+ +

(but other kinds of bug reports and/or feature requests + are also always welcome, of course!)

+ +

FontBakery version: 0.9.2

+ +

Section: Google Fonts

+🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ +

Does DESCRIPTION file contain a upstream Git repo URL?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/description/git_url>
+ +
🔥 Lato-Italic.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-ExtraLightItalic.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-Bold.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-Black.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-Light.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-BoldItalic.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-Regular.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-SemiBoldItalic.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-ExtraBoldItalic.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-Thin.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-ThinItalic.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-ExtraLight.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-BlackItalic.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-Medium.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-LightItalic.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-ExtraBold.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-SemiBold.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+
🔥 Lato-MediumItalic.ttf
  • 🔥 FAIL

    Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]

    +
+

Checking OS/2 achVendID.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/vendor_id>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx +[code: unknown]

    +
+

Check for codepoints not covered by METADATA subsets.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/unreachable_subsetting>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition
    • +
    • U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition
    • +
    • U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition
    • +
    • U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition
    • +
    • U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition
    • +
    • U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition
    • +
    • U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition
    • +
    • U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition
    • +
    • U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition
    • +
    • U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition
    • +
    • U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition
    • +
    • U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition
    • +
    • U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh
    • +
    • U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition
    • +
    • U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition
    • +
    • U+02CD MODIFIER LETTER LOW MACRON: try adding lisu
    • +
    • U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition
    • +
    • U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition
    • +
    • U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition
    • +
    • U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition
    • +
    • U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition
    • +
    • U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition
    • +
    • U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition
    • +
    • U+02D8 BREVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DB OGONEK: try adding one of: yi, canadian-aboriginal
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition
    • +
    • U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition
    • +
    • U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition
    • +
    • U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition
    • +
    • U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition
    • +
    • U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition
    • +
    • U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition
    • +
    • U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition
    • +
    • U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition
    • +
    • U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition
    • +
    • U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition
    • +
    • U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition
    • +
    • U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition
    • +
    • U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition
    • +
    • U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition
    • +
    • U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition
    • +
    • U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition
    • +
    • U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition
    • +
    • U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition
    • +
    • U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition
    • +
    • U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition
    • +
    • U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition
    • +
    • U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition
    • +
    • U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition
    • +
    • U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh
    • +
    • U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan
    • +
    • U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee
    • +
    • U+030C COMBINING CARON: try adding one of: tai-le, cherokee
    • +
    • U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition
    • +
    • U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+0310 COMBINING CANDRABINDU: not included in any glyphset definition
    • +
    • U+0311 COMBINING INVERTED BREVE: try adding coptic
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0313 COMBINING COMMA ABOVE: try adding old-permic
    • +
    • U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition
    • +
    • U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition
    • +
    • U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition
    • +
    • U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition
    • +
    • U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+031D COMBINING UP TACK BELOW: not included in any glyphset definition
    • +
    • U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition
    • +
    • U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0320 COMBINING MINUS SIGN BELOW: try adding syriac
    • +
    • U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition
    • +
    • U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition
    • +
    • U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee
    • +
    • U+0325 COMBINING RING BELOW: try adding syriac
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition
    • +
    • U+032C COMBINING CARON BELOW: not included in any glyphset definition
    • +
    • U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac
    • +
    • U+032E COMBINING BREVE BELOW: try adding syriac
    • +
    • U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition
    • +
    • U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac
    • +
    • U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee
    • +
    • U+0332 COMBINING LOW LINE: not included in any glyphset definition
    • +
    • U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition
    • +
    • U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition
    • +
    • U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition
    • +
    • U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition
    • +
    • U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition
    • +
    • U+033B COMBINING SQUARE BELOW: not included in any glyphset definition
    • +
    • U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition
    • +
    • U+033D COMBINING X ABOVE: not included in any glyphset definition
    • +
    • U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition
    • +
    • U+033F COMBINING DOUBLE OVERLINE: try adding coptic
    • +
    • U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition
    • +
    • U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition
    • +
    • U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition
    • +
    • U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition
    • +
    • U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition
    • +
    • U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition
    • +
    • U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition
    • +
    • U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition
    • +
    • U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition
    • +
    • U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition
    • +
    • U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition
    • +
    • U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition
    • +
    • U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition
    • +
    • U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition
    • +
    • U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition
    • +
    • U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0352 COMBINING FERMATA: not included in any glyphset definition
    • +
    • U+0353 COMBINING X BELOW: not included in any glyphset definition
    • +
    • U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition
    • +
    • U+0358 COMBINING DOT ABOVE RIGHT: try adding osage
    • +
    • U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition
    • +
    • U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition
    • +
    • U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition
    • +
    • U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition
    • +
    • U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition
    • +
    • U+035E COMBINING DOUBLE MACRON: try adding coptic
    • +
    • U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition
    • +
    • U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition
    • +
    • U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic
    • +
    • U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition
    • +
    • U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition
    • +
    • U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition
    • +
    • U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition
    • +
    • U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition
    • +
    • U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition
    • +
    • U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition
    • +
    • U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition
    • +
    • U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition
    • +
    • U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition
    • +
    • U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition
    • +
    • U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition
    • +
    • U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition
    • +
    • U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai
    • +
    • U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition
    • +
    • U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition
    • +
    • U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition
    • +
    • U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition
    • +
    • U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition
    • +
    • U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition
    • +
    • U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition
    • +
    • U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition
    • +
    • U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition
    • +
    • U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition
    • +
    • U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition
    • +
    • U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition
    • +
    • U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition
    • +
    • U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition
    • +
    • U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition
    • +
    • U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition
    • +
    • U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition
    • +
    • U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition
    • +
    • U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition
    • +
    • U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition
    • +
    • U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition
    • +
    • U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition
    • +
    • U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition
    • +
    • U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition
    • +
    • U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition
    • +
    • U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition
    • +
    • U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition
    • +
    • U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition
    • +
    • U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition
    • +
    • U+1D25 LATIN LETTER AIN: not included in any glyphset definition
    • +
    • U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition
    • +
    • U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition
    • +
    • U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition
    • +
    • U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition
    • +
    • U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition
    • +
    • U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition
    • +
    • U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition
    • +
    • U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition
    • +
    • U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition
    • +
    • U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition
    • +
    • U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition
    • +
    • U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition
    • +
    • U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition
    • +
    • U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition
    • +
    • U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition
    • +
    • U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition
    • +
    • U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition
    • +
    • U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition
    • +
    • U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition
    • +
    • U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition
    • +
    • U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition
    • +
    • U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition
    • +
    • U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition
    • +
    • U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition
    • +
    • U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition
    • +
    • U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition
    • +
    • U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition
    • +
    • U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition
    • +
    • U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition
    • +
    • U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition
    • +
    • U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition
    • +
    • U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition
    • +
    • U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition
    • +
    • U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition
    • +
    • U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition
    • +
    • U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition
    • +
    • U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition
    • +
    • U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition
    • +
    • U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition
    • +
    • U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition
    • +
    • U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition
    • +
    • U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition
    • +
    • U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition
    • +
    • U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition
    • +
    • U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition
    • +
    • U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition
    • +
    • U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition
    • +
    • U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition
    • +
    • U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition
    • +
    • U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition
    • +
    • U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition
    • +
    • U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition
    • +
    • U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition
    • +
    • U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition
    • +
    • U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition
    • +
    • U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition
    • +
    • U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition
    • +
    • U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition
    • +
    • U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition
    • +
    • U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition
    • +
    • U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition
    • +
    • U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition
    • +
    • U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition
    • +
    • U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition
    • +
    • U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition
    • +
    • U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition
    • +
    • U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition
    • +
    • U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition
    • +
    • U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition
    • +
    • U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition
    • +
    • U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition
    • +
    • U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition
    • +
    • U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition
    • +
    • U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition
    • +
    • U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition
    • +
    • U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition
    • +
    • U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition
    • +
    • U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition
    • +
    • U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition
    • +
    • U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition
    • +
    • U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition
    • +
    • U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition
    • +
    • U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition
    • +
    • U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition
    • +
    • U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition
    • +
    • U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition
    • +
    • U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition
    • +
    • U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition
    • +
    • U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition
    • +
    • U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition
    • +
    • U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition
    • +
    • U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition
    • +
    • U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition
    • +
    • U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition
    • +
    • U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition
    • +
    • U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition
    • +
    • U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition
    • +
    • U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition
    • +
    • U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition
    • +
    • U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition
    • +
    • U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition
    • +
    • U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition
    • +
    • U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition
    • +
    • U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition
    • +
    • U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition
    • +
    • U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition
    • +
    • U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition
    • +
    • U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition
    • +
    • U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition
    • +
    • U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition
    • +
    • U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition
    • +
    • U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition
    • +
    • U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition
    • +
    • U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition
    • +
    • U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition
    • +
    • U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition
    • +
    • U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition
    • +
    • U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition
    • +
    • U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition
    • +
    • U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition
    • +
    • U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition
    • +
    • U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition
    • +
    • U+2000 EN QUAD: not included in any glyphset definition
    • +
    • U+2001 EM QUAD: not included in any glyphset definition
    • +
    • U+2003 EM SPACE: try adding nushu
    • +
    • U+2004 THREE-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2006 SIX-PER-EM SPACE: not included in any glyphset definition
    • +
    • U+2007 FIGURE SPACE: not included in any glyphset definition
    • +
    • U+2008 PUNCTUATION SPACE: not included in any glyphset definition
    • +
    • U+200A HAIR SPACE: not included in any glyphset definition
    • +
    • U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana
    • +
    • U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana
    • +
    • U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu
    • +
    • U+2012 FIGURE DASH: not included in any glyphset definition
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2017 DOUBLE LOW LINE: not included in any glyphset definition
    • +
    • U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam
    • +
    • U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2034 TRIPLE PRIME: try adding math
    • +
    • U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition
    • +
    • U+203D INTERROBANG: not included in any glyphset definition
    • +
    • U+203E OVERLINE: not included in any glyphset definition
    • +
    • U+205E VERTICAL FOUR DOTS: try adding old-hungarian
    • +
    • U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition
    • +
    • U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition
    • +
    • U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2076 SUPERSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2079 SUPERSCRIPT NINE: not included in any glyphset definition
    • +
    • U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+207B SUPERSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition
    • +
    • U+2080 SUBSCRIPT ZERO: not included in any glyphset definition
    • +
    • U+2081 SUBSCRIPT ONE: not included in any glyphset definition
    • +
    • U+2082 SUBSCRIPT TWO: not included in any glyphset definition
    • +
    • U+2083 SUBSCRIPT THREE: not included in any glyphset definition
    • +
    • U+2084 SUBSCRIPT FOUR: not included in any glyphset definition
    • +
    • U+2085 SUBSCRIPT FIVE: not included in any glyphset definition
    • +
    • U+2086 SUBSCRIPT SIX: not included in any glyphset definition
    • +
    • U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition
    • +
    • U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition
    • +
    • U+2089 SUBSCRIPT NINE: not included in any glyphset definition
    • +
    • U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition
    • +
    • U+208B SUBSCRIPT MINUS: not included in any glyphset definition
    • +
    • U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition
    • +
    • U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition
    • +
    • U+208F : not included in any glyphset definition
    • +
    • U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition
    • +
    • U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition
    • +
    • U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition
    • +
    • U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition
    • +
    • U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition
    • +
    • U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols
    • +
    • U+2105 CARE OF: not included in any glyphset definition
    • +
    • U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition
    • +
    • U+2120 SERVICE MARK: not included in any glyphset definition
    • +
    • U+2126 OHM SIGN: not included in any glyphset definition
    • +
    • U+212E ESTIMATED SYMBOL: not included in any glyphset definition
    • +
    • U+2132 TURNED CAPITAL F: not included in any glyphset definition
    • +
    • U+214D AKTIESELSKAB: not included in any glyphset definition
    • +
    • U+214E TURNED SMALL F: not included in any glyphset definition
    • +
    • U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition
    • +
    • U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition
    • +
    • U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition
    • +
    • U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition
    • +
    • U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition
    • +
    • U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition
    • +
    • U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition
    • +
    • U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition
    • +
    • U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition
    • +
    • U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition
    • +
    • U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition
    • +
    • U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition
    • +
    • U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition
    • +
    • U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols
    • +
    • U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols
    • +
    • U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols
    • +
    • U+2195 UP DOWN ARROW: try adding one of: math, symbols
    • +
    • U+2196 NORTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+2197 NORTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2198 SOUTH EAST ARROW: try adding one of: math, symbols
    • +
    • U+2199 SOUTH WEST ARROW: try adding one of: math, symbols
    • +
    • U+21A8 UP DOWN ARROW WITH BASE: try adding math
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+221F RIGHT ANGLE: try adding math
    • +
    • U+2229 INTERSECTION: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2261 IDENTICAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+2302 HOUSE: try adding symbols
    • +
    • U+2310 REVERSED NOT SIGN: try adding math
    • +
    • U+2320 TOP HALF INTEGRAL: try adding math
    • +
    • U+2321 BOTTOM HALF INTEGRAL: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols
    • +
    • U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols
    • +
    • U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols
    • +
    • U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols
    • +
    • U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols
    • +
    • U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols
    • +
    • U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols
    • +
    • U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols
    • +
    • U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25AA BLACK SMALL SQUARE: try adding symbols
    • +
    • U+25AB WHITE SMALL SQUARE: try adding symbols
    • +
    • U+25CA LOZENGE: try adding one of: math, symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E6 WHITE BULLET: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+263C WHITE SUN WITH RAYS: try adding symbols
    • +
    • U+2669 QUARTER NOTE: try adding one of: music, symbols
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols
    • +
    • U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic
    • +
    • U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition
    • +
    • U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition
    • +
    • U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition
    • +
    • U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition
    • +
    • U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition
    • +
    • U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian
    • +
    • U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian
    • +
    • U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+

Check license file has good copyright string.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/license/OFL_copyright>
+ +
🔥 Lato-Italic.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-ExtraLightItalic.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-Bold.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-Black.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-Light.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-BoldItalic.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-Regular.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-SemiBoldItalic.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-ExtraBoldItalic.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-Thin.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-ThinItalic.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-ExtraLight.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-BlackItalic.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-Medium.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-LightItalic.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-ExtraBold.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-SemiBold.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+
🔥 Lato-MediumItalic.ttf
  • 🔥 FAIL

    First line in license file is:

    +

    "copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name "lato""

    +

    which does not match the expected format, similar to:

    +

    "Copyright 2022 The Familyname Project Authors (git url)" [code: bad-format]

    +
+

Check copyright namerecords match license file.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/name/license>
+ +
🔥 Lato-Italic.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-ExtraLightItalic.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-Bold.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-Black.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-Light.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-BoldItalic.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-Regular.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-SemiBoldItalic.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-ExtraBoldItalic.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-Thin.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-ThinItalic.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-ExtraLight.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-BlackItalic.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-Medium.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-LightItalic.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-ExtraBold.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-SemiBold.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+
🔥 Lato-MediumItalic.ttf
  • 🔥 FAIL

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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

    License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: "Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). " 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]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    For now we're still accepting http URLs, but you should consider using https instead. +[code: http]

    +
+

License URL matches License text on name table?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/name/license_url>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]

    +
  • ⚠️ WARN

    Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]

    +
+

Description strings in the name table must not exceed 200 characters.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/name/description_max_length>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]

    +
+

Copyright notices match canonical pattern in METADATA.pb

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/valid_copyright>
+ +
🔥 Lato-Italic.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-ExtraLightItalic.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-Bold.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-Black.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-Light.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-BoldItalic.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-Regular.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-SemiBoldItalic.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-ExtraBoldItalic.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-Thin.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-ThinItalic.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-ExtraLight.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-BlackItalic.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-Medium.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-LightItalic.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-ExtraBold.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-SemiBold.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+
🔥 Lato-MediumItalic.ttf
  • 🔥 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 (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name "lato". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). " [code: bad-notice-format]

    +
+

Copyright notices match canonical pattern in fonts

+
Check ID: <FontBakeryCheck:com.google.fonts/check/font_copyright>
+ +
🔥 Lato-Italic.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-ExtraLightItalic.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-Bold.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-Black.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-Light.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-BoldItalic.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-Regular.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-SemiBoldItalic.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-ExtraBoldItalic.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-Thin.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-ThinItalic.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-ExtraLight.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-BlackItalic.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-Medium.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-LightItalic.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-ExtraBold.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-SemiBold.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+
🔥 Lato-MediumItalic.ttf
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
  • 🔥 FAIL

    Name Table entry: Copyright notices should match a pattern similar to: "Copyright 2019 The Familyname Project Authors (git url)" +But instead we have got: +"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). " [code: bad-notice-format]

    +
+

Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/reserved_font_name>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    METADATA.pb: copyright field ("Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). ") contains "Reserved Font Name". This is an error except in a few specific rare cases. [code: rfn]

    +
+

METADATA.pb: Check URL on copyright string is the same as in repository_url field.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/consistent_repo_urls>
+ +
🔥 Lato-Italic.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-ExtraLightItalic.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-Bold.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-Black.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-Light.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-BoldItalic.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-Regular.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-SemiBoldItalic.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-ExtraBoldItalic.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-Thin.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-ThinItalic.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-ExtraLight.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-BlackItalic.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-Medium.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-LightItalic.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-ExtraBold.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-SemiBold.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+
🔥 Lato-MediumItalic.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/ +[code: mismatch]

    +
+

Glyphs are similiar to Google Fonts version?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/production_glyphs_similarity>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    Following glyphs differ greatly from Google Fonts version: +* Aacute +* Acircumflex +* Adieresis +* Agrave +* Atilde +* Cacute +* Eacute +* Ecircumflex +* Edieresis +* Egrave +* Iacute +* Icircumflex +* Idieresis +* Igrave +* Nacute +* Ntilde +* Oacute +* Ocircumflex +* Odieresis +* Ograve +* Otilde +* Sacute +* Scaron +* Uacute +* Ucircumflex +* Udieresis +* Ugrave +* Yacute +* Ydieresis +* Zacute +* Zcaron +* eight +* five +* four +* integral +* mu +* nine +* notequal +* one +* pi +* seven +* six +* three +* two and zero

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    Following glyphs differ greatly from Google Fonts version: +* Aacute +* Acircumflex +* Agrave +* Atilde +* Cacute +* Eacute +* Ecircumflex +* Egrave +* Eth +* Iacute +* Icircumflex +* Igrave +* Nacute +* Ntilde +* Oacute +* Ocircumflex +* Ograve +* Otilde +* Sacute +* Scaron +* Uacute +* Ucircumflex +* Ugrave +* Yacute +* Zacute +* Zcaron +* asciicircum +* florin +* integral +* lozenge +* mu +* pi +* quotedblbase +* quotedblleft +* quotedblright +* quoteleft +* quoteright and quotesinglbase

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    Following glyphs differ greatly from Google Fonts version: +* .notdef +* A +* AE +* Aacute +* Acircumflex +* Adieresis +* Agrave +* Aogonek +* Aring +* Atilde +* B +* C +* Cacute +* Ccedilla +* D +* E +* Eacute +* Ecircumflex +* Edieresis +* Egrave +* Eogonek +* Eth +* Euro +* F +* G +* H +* I +* Iacute +* Icircumflex +* Idieresis +* Igrave +* J +* K +* L +* Lslash +* M +* N +* Nacute +* Ntilde +* O +* OE +* Oacute +* Ocircumflex +* Odieresis +* Ograve +* Omega +* Oslash +* Otilde +* P +* Q +* R +* S +* Sacute +* Scaron +* T +* Thorn +* U +* Uacute +* Ucircumflex +* Udieresis +* Ugrave +* V +* W +* X +* Y +* Yacute +* Ydieresis +* Z +* Zacute +* Zcaron +* Zdotaccent +* a +* aacute +* acircumflex +* acute +* adieresis +* ae +* agrave +* ampersand +* aogonek +* approxequal +* aring +* asciitilde +* asterisk +* at +* atilde +* b +* backslash +* bar +* braceleft +* braceright +* bracketleft +* bracketright +* breve +* brokenbar +* bullet +* c +* cacute +* caron +* ccedilla +* cent +* circumflex +* colon +* comma +* copyright +* currency +* d +* dagger +* daggerdbl +* degree +* dieresis +* divide +* dollar +* dotaccent +* dotlessi +* e +* eacute +* ecircumflex +* edieresis +* egrave +* eight +* ellipsis +* emdash +* endash +* eogonek +* equal +* eth +* exclam +* exclamdown +* f +* five +* florin +* four +* fraction +* g +* germandbls +* grave +* greater +* greaterequal +* guillemotleft +* guillemotright +* guilsinglleft +* guilsinglright +* h +* hungarumlaut +* hyphen +* i +* iacute +* icircumflex +* idieresis +* igrave +* infinity +* integral +* j +* k +* l +* less +* lessequal +* logicalnot +* lozenge +* lslash +* m +* macron +* minus +* mu +* multiply +* n +* nacute +* nine +* notequal +* ntilde +* numbersign +* o +* oacute +* ocircumflex +* odieresis +* oe +* ogonek +* ograve +* one +* onehalf +* onequarter +* ordfeminine +* ordmasculine +* oslash +* otilde +* p +* paragraph +* parenleft +* parenright +* partialdiff +* percent +* period +* periodcentered +* perthousand +* pi +* plus +* plusminus +* product +* q +* question +* questiondown +* quotedbl +* quotedblbase +* quotedblleft +* quotedblright +* quoteleft +* quoteright +* quotesinglbase +* quotesingle +* r +* radical +* registered +* ring +* s +* sacute +* scaron +* section +* semicolon +* seven +* six +* slash +* sterling +* summation +* t +* thorn +* three +* threequarters +* tilde +* trademark +* two +* u +* uacute +* ucircumflex +* udieresis +* ugrave +* underscore +* v +* w +* x +* y +* yacute +* ydieresis +* yen +* z +* zacute +* zcaron +* zdotaccent and zero

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    Following glyphs differ greatly from Google Fonts version: +* Aacute +* Acircumflex +* Agrave +* Eacute +* Ecircumflex +* Egrave +* Iacute +* Icircumflex +* Igrave +* Nacute +* Oacute +* Ocircumflex +* Ograve +* Sacute +* Scaron +* Uacute +* Ucircumflex +* Ugrave +* Yacute +* Zacute +* Zcaron +* asciicircum +* integral +* lozenge +* mu +* pi +* quotedblbase +* quotedblleft and quotedblright

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    Following glyphs differ greatly from Google Fonts version: +* Aacute +* Acircumflex +* Adieresis +* Agrave +* Aring +* Atilde +* Cacute +* Eacute +* Ecircumflex +* Edieresis +* Egrave +* Iacute +* Icircumflex +* Idieresis +* Igrave +* Nacute +* Ntilde +* Oacute +* Ocircumflex +* Odieresis +* Ograve +* Otilde +* Sacute +* Scaron +* Uacute +* Ucircumflex +* Udieresis +* Ugrave +* Yacute +* Ydieresis +* Zacute +* Zcaron +* aring +* eight +* five +* four +* integral +* mu +* nine +* notequal +* one +* pi +* ring +* seven +* six +* three +* two and zero

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    Following glyphs differ greatly from Google Fonts version: +* Aacute +* Acircumflex +* Agrave +* Atilde +* Cacute +* Eacute +* Ecircumflex +* Egrave +* Eth +* Iacute +* Icircumflex +* Igrave +* Nacute +* Ntilde +* Oacute +* Ocircumflex +* Ograve +* Otilde +* Sacute +* Scaron +* Uacute +* Ucircumflex +* Ugrave +* Yacute +* Zacute +* Zcaron +* asciicircum +* integral +* lozenge +* mu +* pi +* quotedblbase +* quotedblleft +* quotedblright +* quoteleft +* quoteright and quotesinglbase

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    Following glyphs differ greatly from Google Fonts version: +* integral and notequal

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    Following glyphs differ greatly from Google Fonts version: +* .notdef +* A +* AE +* Aacute +* Acircumflex +* Adieresis +* Agrave +* Aogonek +* Aring +* Atilde +* B +* C +* Cacute +* Ccedilla +* D +* E +* Eacute +* Ecircumflex +* Edieresis +* Egrave +* Eogonek +* Eth +* Euro +* F +* G +* H +* I +* Iacute +* Icircumflex +* Idieresis +* Igrave +* J +* K +* L +* Lslash +* M +* N +* Nacute +* Ntilde +* O +* OE +* Oacute +* Ocircumflex +* Odieresis +* Ograve +* Omega +* Oslash +* Otilde +* P +* Q +* R +* S +* Sacute +* Scaron +* T +* Thorn +* U +* Uacute +* Ucircumflex +* Udieresis +* Ugrave +* V +* W +* X +* Y +* Yacute +* Ydieresis +* Z +* Zacute +* Zcaron +* Zdotaccent +* a +* aacute +* acircumflex +* acute +* adieresis +* ae +* agrave +* ampersand +* aogonek +* approxequal +* aring +* asciicircum +* asciitilde +* asterisk +* at +* atilde +* b +* backslash +* bar +* braceleft +* braceright +* bracketleft +* bracketright +* breve +* brokenbar +* bullet +* c +* cacute +* caron +* ccedilla +* cent +* circumflex +* colon +* comma +* copyright +* currency +* d +* dagger +* daggerdbl +* degree +* dieresis +* divide +* dollar +* dotaccent +* dotlessi +* e +* eacute +* ecircumflex +* edieresis +* egrave +* eight +* ellipsis +* emdash +* endash +* eogonek +* equal +* eth +* exclam +* exclamdown +* f +* five +* florin +* four +* fraction +* g +* germandbls +* grave +* greater +* greaterequal +* guillemotleft +* guillemotright +* guilsinglleft +* guilsinglright +* h +* hungarumlaut +* hyphen +* i +* iacute +* icircumflex +* idieresis +* igrave +* infinity +* j +* k +* l +* less +* lessequal +* logicalnot +* lozenge +* lslash +* m +* macron +* minus +* mu +* multiply +* n +* nacute +* nine +* notequal +* ntilde +* numbersign +* o +* oacute +* ocircumflex +* odieresis +* oe +* ograve +* one +* onehalf +* onequarter +* ordfeminine +* ordmasculine +* oslash +* otilde +* p +* paragraph +* parenleft +* parenright +* partialdiff +* percent +* period +* periodcentered +* perthousand +* pi +* plus +* plusminus +* product +* q +* question +* questiondown +* quotedbl +* quotedblbase +* quotedblleft +* quotedblright +* quoteleft +* quoteright +* quotesinglbase +* quotesingle +* r +* radical +* registered +* ring +* s +* sacute +* scaron +* section +* semicolon +* seven +* six +* slash +* sterling +* summation +* t +* thorn +* three +* threequarters +* tilde +* trademark +* two +* u +* uacute +* ucircumflex +* udieresis +* ugrave +* underscore +* v +* w +* x +* y +* yacute +* ydieresis +* yen +* z +* zacute +* zcaron +* zdotaccent and zero

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    Following glyphs differ greatly from Google Fonts version: +* Aacute +* Acircumflex +* Agrave +* Cacute +* Ecircumflex +* Icircumflex +* Ocircumflex +* eight +* five +* four +* integral +* mu +* nine +* notequal +* six +* three +* two and zero

    +
+

Name table strings must not contain the string 'Reserved Font Name'.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/name/rfn>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
  • ⚠️ WARN

    Name table entry contains "Reserved Font Name" for a family name ("Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]

    +
+

A static fonts directory with at least two fonts must accompany variable fonts

+
Check ID: <FontBakeryCheck:com.google.fonts/check/repo/vf_has_static_fonts>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+

Ensure METADATA.pb does not use escaped strings.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/escaped_strings>
+ +
🔥 Lato-Italic.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-ExtraLightItalic.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-Bold.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-Black.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-Light.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-BoldItalic.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-Regular.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-SemiBoldItalic.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-ExtraBoldItalic.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-Thin.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-ThinItalic.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-ExtraLight.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-BlackItalic.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-Medium.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-LightItalic.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-ExtraBold.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-SemiBold.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+
🔥 Lato-MediumItalic.ttf
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
  • 🔥 FAIL

    Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name '. Please use an unicode string instead. [code: escaped-strings]

    +
+

METADATA.pb: Designers are listed correctly on the Google Fonts catalog?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/designer_profiles>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    It seems that Łukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]

    +
+

On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/description/family_update>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+

Ensure Stylistic Sets have description.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/stylisticset_description>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
  • ⚠️ WARN

    The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]

    +
+

Ensure fonts have ScriptLangTags declared on the 'meta' table.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/meta/script_lang_tags>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+

Section: Universal

+🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ +

Name table records must not have trailing spaces.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/name/trailing_spaces>
+ +
🔥 Lato-Italic.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-ExtraLightItalic.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-Bold.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-Black.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-Light.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-BoldItalic.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-Regular.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-SemiBoldItalic.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-ExtraBoldItalic.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-Thin.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-ThinItalic.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-ExtraLight.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-BlackItalic.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-Medium.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-LightItalic.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-ExtraBold.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-SemiBold.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+
🔥 Lato-MediumItalic.ttf
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
  • 🔥 FAIL

    Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]

    +
+

Check font contains no unreachable glyphs

+
Check ID: <FontBakeryCheck:com.google.fonts/check/unreachable_glyphs>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00305
    +
    +- glyph00363
    +
    +- glyph00467
    +
    +- glyph00468
    +
    +- glyph00469
    +
    +- glyph00470
    +
    +- glyph00471
    +
    +- glyph00472
    +
    +- glyph00473
    +
    +- glyph00474
    +
    +- glyph00494
    +
    +- glyph00495
    +
    +- glyph00496
    +
    +- glyph00507
    +
    +- glyph00511
    +
    +- glyph00512
    +
    +- glyph00515
    +
    +- glyph00516
    +
    +- glyph00517
    +
    +- glyph00519
    +
    +- glyph00520
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00529
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00533
    +
    +- glyph00534
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00539
    +
    +- glyph00540
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00550
    +
    +- glyph00551
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00556
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00566
    +
    +- glyph00567
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00572
    +
    +- glyph00573
    +
    +- glyph00574
    +
    +- glyph00922
    +
    +- glyph00947
    +
    +- glyph01108
    +
    +- glyph01110
    +
    +- glyph01112
    +
    +- glyph01113
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01152
    +
    +- glyph01162
    +
    +- glyph01174
    +
    +- glyph01198
    +
    +- glyph01233
    +
    +- glyph01237
    +
    +- glyph01238
    +
    +- glyph01246
    +
    +- glyph01247
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01314
    +
    +- glyph01315
    +
    +- glyph01349
    +
    +- glyph01350
    +
    +- glyph01363
    +
    +- glyph01364
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01379
    +
    +- glyph01415
    +
    +- glyph01421
    +
    +- glyph01422
    +
    +- glyph01424
    +
    +- glyph01425
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01441
    +
    +- glyph01461
    +
    +- glyph01462
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01479
    +
    +- glyph01480
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01549
    +
    +- glyph01550
    +
    +- glyph01556
    +
    +- glyph01557
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01571
    +
    +- glyph01572
    +
    +- glyph01573
    +
    +- glyph01574
    +
    +- glyph01575
    +
    +- glyph01576
    +
    +- glyph02084
    +
    +- glyph02110
    +
    +- glyph02143
    +
    +- glyph02276
    +
    +- glyph02557
    +
    +- glyph02558
    +
    +- glyph02564
    +
    +- glyph02587
    +
    +- glyph02590
    +
    +- glyph02593
    +
    +- glyph02601
    +
    +- glyph02605
    +
    +- glyph02606
    +
    +- glyph02610
    +
    +- glyph02615
    +
    +- glyph02627
    +
    +- glyph02635
    +
    +- glyph02641
    +
    +- glyph02646
    +
    +- glyph02649
    +
    +- glyph02652
    +
    +- glyph02658
    +
    +- glyph02664
    +
    +- glyph02668
    +
    +- glyph02671
    +
    +- glyph02675
    +
    +- glyph02678
    +
    +- glyph02680
    +
    +- glyph02683
    +
    +- glyph02686
    +
    +- glyph02689
    +
    +- glyph02692
    +
    +- glyph02695
    +
    +- glyph02698
    +
    +- glyph02701
    +
    +- glyph02704
    +
    +- glyph02707
    +
    +- glyph02711
    +
    +- glyph02714
    +
    +- glyph02717
    +
    +- glyph02720
    +
    +- glyph02723
    +
    +- glyph02726
    +
    +- glyph02728
    +
    +- glyph02782
    +
    +- glyph02785
    +
    +- glyph02788
    +
    +- glyph02794
    +
    +- glyph02805
    +
    +- glyph02806
    +
    +- glyph02807
    +
    +- glyph02808
    +
    +- glyph02810
    +
    +- glyph02811
    +
    +- glyph02812
    +
    +- glyph02813
    +
    +- glyph02814
    +
    +- glyph02815
    +
    +- glyph02816
    +
    +- glyph02817
    +
    +- glyph02818
    +
    +- glyph02820
    +
    +- glyph02821
    +
    +- glyph02822
    +
    +- glyph02823
    +
    +- glyph02824
    +
    +- glyph02825
    +
    +- glyph02826
    +
    +- glyph02827
    +
    +- glyph02828
    +
    +- glyph02829
    +
    +- glyph02830
    +
    +- glyph02831
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02834
    +
    +- glyph02835
    +
    +- glyph02836
    +
    +- glyph02837
    +
    +- glyph02838
    +
    +- glyph02839
    +
    +- glyph02840
    +
    +- glyph02841
    +
    +- glyph02842
    +
    +- glyph02843
    +
    +- glyph02844
    +
    +- glyph02845
    +
    +- glyph02846
    +
    +- glyph02847
    +
    +- glyph02848
    +
    +- glyph02849
    +
    +- glyph02850
    +
    +- glyph02851
    +
    +- glyph02852
    +
    +- glyph02853
    +
    +- glyph02854
    +
    +- glyph02855
    +
    +- glyph02856
    +
    +- glyph02857
    +
    +- glyph02858
    +
    +- glyph02859
    +
    +- glyph02860
    +
    +- glyph02861
    +
    +- glyph02862
    +
    +- glyph02863
    +
    +- glyph02864
    +
    +- glyph02865
    +
    +- glyph02866
    +
    +- glyph02867
    +
    +- glyph02868
    +
    +- glyph02869
    +
    +- glyph02870
    +
    +- glyph02871
    +
    +- glyph02872
    +
    +- glyph02873
    +
    +- glyph02874
    +
    +- glyph02875
    +
    +- glyph02876
    +
    +- glyph02877
    +
    +- glyph02878
    +
    +- glyph02879
    +
    +- glyph02880
    +
    +- glyph02881
    +
    +- glyph02882
    +
    +- glyph02883
    +
    +- glyph02884
    +
    +- glyph02885
    +
    +- glyph02886
    +
    +- glyph02887
    +
    +- glyph02888
    +
    +- glyph02889
    +
    +- glyph02890
    +
    +- glyph02891
    +
    +- glyph02892
    +
    +- glyph02893
    +
    +- glyph02894
    +
    +- glyph02895
    +
    +- glyph02896
    +
    +- glyph02897
    +
    +- glyph02898
    +
    +- glyph02899
    +
    +- glyph02900
    +
    +- glyph02901
    +
    +- glyph02902
    +
    +- glyph02903
    +
    +- glyph02904
    +
    +- glyph02905
    +
    +- glyph02906
    +
    +- glyph02907
    +
    +- glyph02908
    +
    +- glyph02909
    +
    +- glyph02910
    +
    +- glyph02911
    +
    +- glyph02912
    +
    +- glyph02913
    +
    +- glyph02914
    +
    +- glyph02915
    +
    +- glyph02916
    +
    +- glyph02917
    +
    +- glyph02918
    +
    +- glyph02919
    +
    +- glyph02920
    +
    +- glyph02921
    +
    +- glyph02922
    +
    +- glyph02923
    +
    +- glyph02924
    +
    +- glyph02925
    +
    +- glyph02926
    +
    +- glyph02927
    +
    +- glyph02928
    +
    +- glyph02929
    +
    +- glyph02930
    +
    +- glyph02931
    +
    +- glyph02932
    +
    +- glyph02933
    +
    +- glyph02934
    +
    +- glyph02935
    +
    +- glyph02936
    +
    +- glyph02937
    +
    +- glyph02938
    +
    +- glyph02939
    +
    +- glyph02940
    +
    +- glyph02941
    +
    +- glyph02942
    +
    +- glyph02943
    +
    +- glyph02944
    +
    +- glyph02945
    +
    +- glyph02946
    +
    +- glyph02947
    +
    +- glyph02948
    +
    +- glyph02949
    +
    +- glyph02950
    +
    +- glyph02951
    +
    +- glyph02952
    +
    +- glyph02953
    +
    +- glyph02954
    +
    +- glyph02955
    +
    +- glyph02956
    +
    +- glyph02957
    +
    +- glyph02958
    +
    +- glyph02959
    +
    +- glyph03006
    +
    +- glyph03007
    +
    +- glyph03008
    +
    +- glyph03009
    +
    +- glyph03010
    +
    +- glyph03011
    +
    +- glyph03012
    +
    +- glyph03013
    +
    +- glyph03014
    +
    +- glyph03015
    +
    +- glyph03016
    +
    +- glyph03017
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00305
    +
    +- glyph00363
    +
    +- glyph00467
    +
    +- glyph00468
    +
    +- glyph00469
    +
    +- glyph00470
    +
    +- glyph00471
    +
    +- glyph00472
    +
    +- glyph00473
    +
    +- glyph00474
    +
    +- glyph00494
    +
    +- glyph00495
    +
    +- glyph00496
    +
    +- glyph00507
    +
    +- glyph00511
    +
    +- glyph00512
    +
    +- glyph00515
    +
    +- glyph00516
    +
    +- glyph00517
    +
    +- glyph00519
    +
    +- glyph00520
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00529
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00533
    +
    +- glyph00534
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00539
    +
    +- glyph00540
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00550
    +
    +- glyph00551
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00556
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00566
    +
    +- glyph00567
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00572
    +
    +- glyph00573
    +
    +- glyph00574
    +
    +- glyph00922
    +
    +- glyph00947
    +
    +- glyph01108
    +
    +- glyph01112
    +
    +- glyph01113
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01152
    +
    +- glyph01162
    +
    +- glyph01174
    +
    +- glyph01198
    +
    +- glyph01233
    +
    +- glyph01237
    +
    +- glyph01238
    +
    +- glyph01246
    +
    +- glyph01247
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01314
    +
    +- glyph01315
    +
    +- glyph01349
    +
    +- glyph01350
    +
    +- glyph01363
    +
    +- glyph01364
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01379
    +
    +- glyph01415
    +
    +- glyph01422
    +
    +- glyph01423
    +
    +- glyph01424
    +
    +- glyph01425
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01441
    +
    +- glyph01461
    +
    +- glyph01462
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01479
    +
    +- glyph01480
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01549
    +
    +- glyph01550
    +
    +- glyph01556
    +
    +- glyph01557
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01571
    +
    +- glyph01572
    +
    +- glyph01573
    +
    +- glyph01574
    +
    +- glyph01575
    +
    +- glyph01576
    +
    +- glyph02084
    +
    +- glyph02110
    +
    +- glyph02143
    +
    +- glyph02276
    +
    +- glyph02557
    +
    +- glyph02558
    +
    +- glyph02564
    +
    +- glyph02587
    +
    +- glyph02590
    +
    +- glyph02593
    +
    +- glyph02601
    +
    +- glyph02605
    +
    +- glyph02606
    +
    +- glyph02610
    +
    +- glyph02615
    +
    +- glyph02627
    +
    +- glyph02635
    +
    +- glyph02641
    +
    +- glyph02646
    +
    +- glyph02649
    +
    +- glyph02652
    +
    +- glyph02658
    +
    +- glyph02664
    +
    +- glyph02668
    +
    +- glyph02671
    +
    +- glyph02675
    +
    +- glyph02678
    +
    +- glyph02680
    +
    +- glyph02683
    +
    +- glyph02686
    +
    +- glyph02689
    +
    +- glyph02692
    +
    +- glyph02695
    +
    +- glyph02698
    +
    +- glyph02701
    +
    +- glyph02704
    +
    +- glyph02707
    +
    +- glyph02711
    +
    +- glyph02714
    +
    +- glyph02717
    +
    +- glyph02720
    +
    +- glyph02723
    +
    +- glyph02726
    +
    +- glyph02728
    +
    +- glyph02782
    +
    +- glyph02785
    +
    +- glyph02788
    +
    +- glyph02794
    +
    +- glyph02805
    +
    +- glyph02806
    +
    +- glyph02807
    +
    +- glyph02808
    +
    +- glyph02810
    +
    +- glyph02811
    +
    +- glyph02812
    +
    +- glyph02813
    +
    +- glyph02814
    +
    +- glyph02815
    +
    +- glyph02816
    +
    +- glyph02817
    +
    +- glyph02818
    +
    +- glyph02820
    +
    +- glyph02821
    +
    +- glyph02822
    +
    +- glyph02823
    +
    +- glyph02824
    +
    +- glyph02825
    +
    +- glyph02826
    +
    +- glyph02827
    +
    +- glyph02828
    +
    +- glyph02829
    +
    +- glyph02830
    +
    +- glyph02831
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02834
    +
    +- glyph02835
    +
    +- glyph02836
    +
    +- glyph02837
    +
    +- glyph02838
    +
    +- glyph02839
    +
    +- glyph02840
    +
    +- glyph02841
    +
    +- glyph02842
    +
    +- glyph02843
    +
    +- glyph02844
    +
    +- glyph02845
    +
    +- glyph02846
    +
    +- glyph02847
    +
    +- glyph02848
    +
    +- glyph02849
    +
    +- glyph02850
    +
    +- glyph02851
    +
    +- glyph02852
    +
    +- glyph02853
    +
    +- glyph02854
    +
    +- glyph02855
    +
    +- glyph02856
    +
    +- glyph02857
    +
    +- glyph02858
    +
    +- glyph02859
    +
    +- glyph02860
    +
    +- glyph02861
    +
    +- glyph02862
    +
    +- glyph02863
    +
    +- glyph02864
    +
    +- glyph02865
    +
    +- glyph02866
    +
    +- glyph02867
    +
    +- glyph02868
    +
    +- glyph02869
    +
    +- glyph02870
    +
    +- glyph02871
    +
    +- glyph02872
    +
    +- glyph02873
    +
    +- glyph02874
    +
    +- glyph02875
    +
    +- glyph02876
    +
    +- glyph02877
    +
    +- glyph02878
    +
    +- glyph02879
    +
    +- glyph02880
    +
    +- glyph02881
    +
    +- glyph02882
    +
    +- glyph02883
    +
    +- glyph02884
    +
    +- glyph02885
    +
    +- glyph02886
    +
    +- glyph02887
    +
    +- glyph02888
    +
    +- glyph02889
    +
    +- glyph02890
    +
    +- glyph02891
    +
    +- glyph02892
    +
    +- glyph02893
    +
    +- glyph02894
    +
    +- glyph02895
    +
    +- glyph02896
    +
    +- glyph02897
    +
    +- glyph02898
    +
    +- glyph02899
    +
    +- glyph02900
    +
    +- glyph02901
    +
    +- glyph02902
    +
    +- glyph02903
    +
    +- glyph02904
    +
    +- glyph02905
    +
    +- glyph02906
    +
    +- glyph02907
    +
    +- glyph02908
    +
    +- glyph02909
    +
    +- glyph02910
    +
    +- glyph02911
    +
    +- glyph02912
    +
    +- glyph02913
    +
    +- glyph02914
    +
    +- glyph02915
    +
    +- glyph02916
    +
    +- glyph02917
    +
    +- glyph02918
    +
    +- glyph02919
    +
    +- glyph02920
    +
    +- glyph02921
    +
    +- glyph02922
    +
    +- glyph02923
    +
    +- glyph02924
    +
    +- glyph02925
    +
    +- glyph02926
    +
    +- glyph02927
    +
    +- glyph02928
    +
    +- glyph02929
    +
    +- glyph02930
    +
    +- glyph02931
    +
    +- glyph02932
    +
    +- glyph02933
    +
    +- glyph02934
    +
    +- glyph02935
    +
    +- glyph02936
    +
    +- glyph02937
    +
    +- glyph02938
    +
    +- glyph02939
    +
    +- glyph02940
    +
    +- glyph02941
    +
    +- glyph02942
    +
    +- glyph02943
    +
    +- glyph02944
    +
    +- glyph02945
    +
    +- glyph02946
    +
    +- glyph02947
    +
    +- glyph02948
    +
    +- glyph02949
    +
    +- glyph02950
    +
    +- glyph02951
    +
    +- glyph02952
    +
    +- glyph02953
    +
    +- glyph02954
    +
    +- glyph02955
    +
    +- glyph02956
    +
    +- glyph02957
    +
    +- glyph02958
    +
    +- glyph02959
    +
    +- glyph03006
    +
    +- glyph03007
    +
    +- glyph03008
    +
    +- glyph03009
    +
    +- glyph03010
    +
    +- glyph03011
    +
    +- glyph03012
    +
    +- glyph03013
    +
    +- glyph03014
    +
    +- glyph03015
    +
    +- glyph03016
    +
    +- glyph03017
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00306
    +
    +- glyph00365
    +
    +- glyph00496
    +
    +- glyph00497
    +
    +- glyph00498
    +
    +- glyph00509
    +
    +- glyph00513
    +
    +- glyph00514
    +
    +- glyph00517
    +
    +- glyph00518
    +
    +- glyph00519
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00525
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00532
    +
    +- glyph00533
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00538
    +
    +- glyph00539
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00549
    +
    +- glyph00550
    +
    +- glyph00552
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00565
    +
    +- glyph00566
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00571
    +
    +- glyph00572
    +
    +- glyph00574
    +
    +- glyph00575
    +
    +- glyph00576
    +
    +- glyph00924
    +
    +- glyph00949
    +
    +- glyph01110
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01116
    +
    +- glyph01117
    +
    +- glyph01154
    +
    +- glyph01164
    +
    +- glyph01176
    +
    +- glyph01200
    +
    +- glyph01235
    +
    +- glyph01239
    +
    +- glyph01240
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01255
    +
    +- glyph01256
    +
    +- glyph01316
    +
    +- glyph01317
    +
    +- glyph01351
    +
    +- glyph01352
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01367
    +
    +- glyph01368
    +
    +- glyph01381
    +
    +- glyph01417
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01438
    +
    +- glyph01439
    +
    +- glyph01443
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01468
    +
    +- glyph01469
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01483
    +
    +- glyph01484
    +
    +- glyph01551
    +
    +- glyph01552
    +
    +- glyph01560
    +
    +- glyph01562
    +
    +- glyph01564
    +
    +- glyph01565
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01569
    +
    +- glyph01600
    +
    +- glyph01611
    +
    +- glyph01612
    +
    +- glyph01613
    +
    +- glyph01614
    +
    +- glyph01616
    +
    +- glyph01617
    +
    +- glyph01618
    +
    +- glyph01619
    +
    +- glyph01620
    +
    +- glyph01621
    +
    +- glyph01622
    +
    +- glyph01623
    +
    +- glyph01624
    +
    +- glyph01626
    +
    +- glyph01627
    +
    +- glyph01628
    +
    +- glyph01629
    +
    +- glyph01630
    +
    +- glyph01631
    +
    +- glyph01632
    +
    +- glyph01633
    +
    +- glyph01634
    +
    +- glyph01635
    +
    +- glyph01636
    +
    +- glyph01637
    +
    +- glyph01638
    +
    +- glyph01639
    +
    +- glyph01640
    +
    +- glyph01641
    +
    +- glyph01642
    +
    +- glyph01643
    +
    +- glyph01644
    +
    +- glyph01645
    +
    +- glyph01646
    +
    +- glyph01647
    +
    +- glyph01648
    +
    +- glyph01649
    +
    +- glyph01650
    +
    +- glyph01651
    +
    +- glyph01652
    +
    +- glyph01653
    +
    +- glyph01654
    +
    +- glyph01655
    +
    +- glyph01656
    +
    +- glyph01657
    +
    +- glyph01658
    +
    +- glyph01659
    +
    +- glyph01660
    +
    +- glyph01661
    +
    +- glyph01662
    +
    +- glyph01663
    +
    +- glyph01664
    +
    +- glyph01665
    +
    +- glyph01666
    +
    +- glyph01667
    +
    +- glyph01668
    +
    +- glyph01669
    +
    +- glyph01670
    +
    +- glyph01671
    +
    +- glyph01672
    +
    +- glyph01673
    +
    +- glyph01674
    +
    +- glyph01675
    +
    +- glyph01676
    +
    +- glyph01677
    +
    +- glyph01678
    +
    +- glyph01679
    +
    +- glyph01680
    +
    +- glyph01681
    +
    +- glyph01682
    +
    +- glyph01683
    +
    +- glyph01684
    +
    +- glyph01685
    +
    +- glyph01686
    +
    +- glyph01687
    +
    +- glyph01688
    +
    +- glyph01689
    +
    +- glyph01690
    +
    +- glyph01691
    +
    +- glyph01692
    +
    +- glyph01693
    +
    +- glyph01694
    +
    +- glyph01695
    +
    +- glyph01696
    +
    +- glyph01697
    +
    +- glyph01698
    +
    +- glyph01699
    +
    +- glyph01700
    +
    +- glyph01701
    +
    +- glyph01702
    +
    +- glyph01703
    +
    +- glyph01704
    +
    +- glyph01705
    +
    +- glyph01706
    +
    +- glyph01707
    +
    +- glyph01708
    +
    +- glyph01709
    +
    +- glyph01710
    +
    +- glyph01711
    +
    +- glyph01712
    +
    +- glyph01713
    +
    +- glyph01714
    +
    +- glyph01715
    +
    +- glyph01716
    +
    +- glyph01717
    +
    +- glyph01718
    +
    +- glyph01719
    +
    +- glyph01720
    +
    +- glyph01721
    +
    +- glyph01722
    +
    +- glyph01723
    +
    +- glyph01724
    +
    +- glyph01725
    +
    +- glyph01726
    +
    +- glyph01727
    +
    +- glyph01728
    +
    +- glyph01729
    +
    +- glyph01730
    +
    +- glyph01731
    +
    +- glyph01732
    +
    +- glyph01733
    +
    +- glyph01734
    +
    +- glyph01735
    +
    +- glyph01736
    +
    +- glyph01737
    +
    +- glyph01738
    +
    +- glyph01739
    +
    +- glyph01740
    +
    +- glyph01741
    +
    +- glyph01742
    +
    +- glyph01743
    +
    +- glyph01744
    +
    +- glyph01745
    +
    +- glyph01746
    +
    +- glyph01747
    +
    +- glyph01748
    +
    +- glyph01749
    +
    +- glyph01750
    +
    +- glyph01751
    +
    +- glyph01752
    +
    +- glyph01753
    +
    +- glyph01754
    +
    +- glyph01755
    +
    +- glyph01756
    +
    +- glyph01757
    +
    +- glyph01758
    +
    +- glyph01759
    +
    +- glyph01760
    +
    +- glyph01761
    +
    +- glyph01762
    +
    +- glyph01763
    +
    +- glyph01764
    +
    +- glyph01765
    +
    +- glyph01786
    +
    +- glyph01823
    +
    +- glyph01824
    +
    +- glyph01825
    +
    +- glyph01826
    +
    +- glyph01827
    +
    +- glyph01828
    +
    +- glyph01829
    +
    +- glyph01830
    +
    +- glyph01831
    +
    +- glyph01832
    +
    +- glyph01833
    +
    +- glyph01834
    +
    +- glyph02314
    +
    +- glyph02339
    +
    +- glyph02371
    +
    +- glyph02502
    +
    +- glyph02783
    +
    +- glyph02784
    +
    +- glyph02791
    +
    +- glyph02814
    +
    +- glyph02817
    +
    +- glyph02820
    +
    +- glyph02828
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02837
    +
    +- glyph02842
    +
    +- glyph02860
    +
    +- glyph02866
    +
    +- glyph02871
    +
    +- glyph02874
    +
    +- glyph02877
    +
    +- glyph02883
    +
    +- glyph02889
    +
    +- glyph02893
    +
    +- glyph02896
    +
    +- glyph02900
    +
    +- glyph02903
    +
    +- glyph02905
    +
    +- glyph02908
    +
    +- glyph02911
    +
    +- glyph02914
    +
    +- glyph02917
    +
    +- glyph02920
    +
    +- glyph02923
    +
    +- glyph02926
    +
    +- glyph02929
    +
    +- glyph02932
    +
    +- glyph02936
    +
    +- glyph02939
    +
    +- glyph02942
    +
    +- glyph02945
    +
    +- glyph02948
    +
    +- glyph02951
    +
    +- glyph02953
    +
    +- glyph03007
    +
    +- glyph03010
    +
    +- glyph03013
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00306
    +
    +- glyph00365
    +
    +- glyph00496
    +
    +- glyph00497
    +
    +- glyph00498
    +
    +- glyph00509
    +
    +- glyph00513
    +
    +- glyph00514
    +
    +- glyph00517
    +
    +- glyph00518
    +
    +- glyph00519
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00525
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00532
    +
    +- glyph00533
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00538
    +
    +- glyph00539
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00549
    +
    +- glyph00550
    +
    +- glyph00552
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00565
    +
    +- glyph00566
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00571
    +
    +- glyph00572
    +
    +- glyph00574
    +
    +- glyph00575
    +
    +- glyph00576
    +
    +- glyph00924
    +
    +- glyph00949
    +
    +- glyph01110
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01116
    +
    +- glyph01117
    +
    +- glyph01154
    +
    +- glyph01164
    +
    +- glyph01176
    +
    +- glyph01200
    +
    +- glyph01235
    +
    +- glyph01239
    +
    +- glyph01240
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01255
    +
    +- glyph01256
    +
    +- glyph01316
    +
    +- glyph01317
    +
    +- glyph01325
    +
    +- glyph01351
    +
    +- glyph01352
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01367
    +
    +- glyph01368
    +
    +- glyph01381
    +
    +- glyph01417
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01438
    +
    +- glyph01439
    +
    +- glyph01443
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01468
    +
    +- glyph01469
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01483
    +
    +- glyph01484
    +
    +- glyph01551
    +
    +- glyph01552
    +
    +- glyph01560
    +
    +- glyph01562
    +
    +- glyph01564
    +
    +- glyph01565
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01569
    +
    +- glyph01600
    +
    +- glyph01611
    +
    +- glyph01612
    +
    +- glyph01613
    +
    +- glyph01614
    +
    +- glyph01616
    +
    +- glyph01617
    +
    +- glyph01618
    +
    +- glyph01619
    +
    +- glyph01620
    +
    +- glyph01621
    +
    +- glyph01622
    +
    +- glyph01623
    +
    +- glyph01624
    +
    +- glyph01626
    +
    +- glyph01627
    +
    +- glyph01628
    +
    +- glyph01629
    +
    +- glyph01630
    +
    +- glyph01631
    +
    +- glyph01632
    +
    +- glyph01633
    +
    +- glyph01634
    +
    +- glyph01635
    +
    +- glyph01636
    +
    +- glyph01637
    +
    +- glyph01638
    +
    +- glyph01639
    +
    +- glyph01640
    +
    +- glyph01641
    +
    +- glyph01642
    +
    +- glyph01643
    +
    +- glyph01644
    +
    +- glyph01645
    +
    +- glyph01646
    +
    +- glyph01647
    +
    +- glyph01648
    +
    +- glyph01649
    +
    +- glyph01650
    +
    +- glyph01651
    +
    +- glyph01652
    +
    +- glyph01653
    +
    +- glyph01654
    +
    +- glyph01655
    +
    +- glyph01656
    +
    +- glyph01657
    +
    +- glyph01658
    +
    +- glyph01659
    +
    +- glyph01660
    +
    +- glyph01661
    +
    +- glyph01662
    +
    +- glyph01663
    +
    +- glyph01664
    +
    +- glyph01665
    +
    +- glyph01666
    +
    +- glyph01667
    +
    +- glyph01668
    +
    +- glyph01669
    +
    +- glyph01670
    +
    +- glyph01671
    +
    +- glyph01672
    +
    +- glyph01673
    +
    +- glyph01674
    +
    +- glyph01675
    +
    +- glyph01676
    +
    +- glyph01677
    +
    +- glyph01678
    +
    +- glyph01679
    +
    +- glyph01680
    +
    +- glyph01681
    +
    +- glyph01682
    +
    +- glyph01683
    +
    +- glyph01684
    +
    +- glyph01685
    +
    +- glyph01686
    +
    +- glyph01687
    +
    +- glyph01688
    +
    +- glyph01689
    +
    +- glyph01690
    +
    +- glyph01691
    +
    +- glyph01692
    +
    +- glyph01693
    +
    +- glyph01694
    +
    +- glyph01695
    +
    +- glyph01696
    +
    +- glyph01697
    +
    +- glyph01698
    +
    +- glyph01699
    +
    +- glyph01700
    +
    +- glyph01701
    +
    +- glyph01702
    +
    +- glyph01703
    +
    +- glyph01704
    +
    +- glyph01705
    +
    +- glyph01706
    +
    +- glyph01707
    +
    +- glyph01708
    +
    +- glyph01709
    +
    +- glyph01710
    +
    +- glyph01711
    +
    +- glyph01712
    +
    +- glyph01713
    +
    +- glyph01714
    +
    +- glyph01715
    +
    +- glyph01716
    +
    +- glyph01717
    +
    +- glyph01718
    +
    +- glyph01719
    +
    +- glyph01720
    +
    +- glyph01721
    +
    +- glyph01722
    +
    +- glyph01723
    +
    +- glyph01724
    +
    +- glyph01725
    +
    +- glyph01726
    +
    +- glyph01727
    +
    +- glyph01728
    +
    +- glyph01729
    +
    +- glyph01730
    +
    +- glyph01731
    +
    +- glyph01732
    +
    +- glyph01733
    +
    +- glyph01734
    +
    +- glyph01735
    +
    +- glyph01736
    +
    +- glyph01737
    +
    +- glyph01738
    +
    +- glyph01739
    +
    +- glyph01740
    +
    +- glyph01741
    +
    +- glyph01742
    +
    +- glyph01743
    +
    +- glyph01744
    +
    +- glyph01745
    +
    +- glyph01746
    +
    +- glyph01747
    +
    +- glyph01748
    +
    +- glyph01749
    +
    +- glyph01750
    +
    +- glyph01751
    +
    +- glyph01752
    +
    +- glyph01753
    +
    +- glyph01754
    +
    +- glyph01755
    +
    +- glyph01756
    +
    +- glyph01757
    +
    +- glyph01758
    +
    +- glyph01759
    +
    +- glyph01760
    +
    +- glyph01761
    +
    +- glyph01762
    +
    +- glyph01763
    +
    +- glyph01764
    +
    +- glyph01765
    +
    +- glyph01786
    +
    +- glyph01823
    +
    +- glyph01824
    +
    +- glyph01825
    +
    +- glyph01826
    +
    +- glyph01827
    +
    +- glyph01828
    +
    +- glyph01829
    +
    +- glyph01830
    +
    +- glyph01831
    +
    +- glyph01832
    +
    +- glyph01833
    +
    +- glyph01834
    +
    +- glyph02314
    +
    +- glyph02339
    +
    +- glyph02371
    +
    +- glyph02502
    +
    +- glyph02783
    +
    +- glyph02784
    +
    +- glyph02791
    +
    +- glyph02814
    +
    +- glyph02817
    +
    +- glyph02820
    +
    +- glyph02828
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02837
    +
    +- glyph02842
    +
    +- glyph02860
    +
    +- glyph02866
    +
    +- glyph02871
    +
    +- glyph02874
    +
    +- glyph02877
    +
    +- glyph02883
    +
    +- glyph02889
    +
    +- glyph02893
    +
    +- glyph02896
    +
    +- glyph02900
    +
    +- glyph02903
    +
    +- glyph02905
    +
    +- glyph02908
    +
    +- glyph02911
    +
    +- glyph02914
    +
    +- glyph02917
    +
    +- glyph02920
    +
    +- glyph02923
    +
    +- glyph02926
    +
    +- glyph02929
    +
    +- glyph02932
    +
    +- glyph02936
    +
    +- glyph02939
    +
    +- glyph02942
    +
    +- glyph02945
    +
    +- glyph02948
    +
    +- glyph02951
    +
    +- glyph02953
    +
    +- glyph03007
    +
    +- glyph03010
    +
    +- glyph03013
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00306
    +
    +- glyph00365
    +
    +- glyph00469
    +
    +- glyph00470
    +
    +- glyph00471
    +
    +- glyph00472
    +
    +- glyph00473
    +
    +- glyph00474
    +
    +- glyph00475
    +
    +- glyph00476
    +
    +- glyph00496
    +
    +- glyph00497
    +
    +- glyph00498
    +
    +- glyph00509
    +
    +- glyph00513
    +
    +- glyph00514
    +
    +- glyph00517
    +
    +- glyph00518
    +
    +- glyph00519
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00525
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00532
    +
    +- glyph00533
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00538
    +
    +- glyph00539
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00549
    +
    +- glyph00550
    +
    +- glyph00552
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00565
    +
    +- glyph00566
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00571
    +
    +- glyph00572
    +
    +- glyph00574
    +
    +- glyph00575
    +
    +- glyph00576
    +
    +- glyph00924
    +
    +- glyph00949
    +
    +- glyph01110
    +
    +- glyph01112
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01116
    +
    +- glyph01117
    +
    +- glyph01154
    +
    +- glyph01164
    +
    +- glyph01176
    +
    +- glyph01200
    +
    +- glyph01235
    +
    +- glyph01239
    +
    +- glyph01240
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01255
    +
    +- glyph01256
    +
    +- glyph01316
    +
    +- glyph01317
    +
    +- glyph01351
    +
    +- glyph01352
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01367
    +
    +- glyph01368
    +
    +- glyph01381
    +
    +- glyph01417
    +
    +- glyph01423
    +
    +- glyph01424
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01438
    +
    +- glyph01439
    +
    +- glyph01443
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01468
    +
    +- glyph01469
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01483
    +
    +- glyph01484
    +
    +- glyph01551
    +
    +- glyph01552
    +
    +- glyph01560
    +
    +- glyph01562
    +
    +- glyph01564
    +
    +- glyph01565
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01569
    +
    +- glyph01600
    +
    +- glyph01611
    +
    +- glyph01612
    +
    +- glyph01613
    +
    +- glyph01614
    +
    +- glyph01616
    +
    +- glyph01617
    +
    +- glyph01618
    +
    +- glyph01619
    +
    +- glyph01620
    +
    +- glyph01621
    +
    +- glyph01622
    +
    +- glyph01623
    +
    +- glyph01624
    +
    +- glyph01626
    +
    +- glyph01627
    +
    +- glyph01628
    +
    +- glyph01629
    +
    +- glyph01630
    +
    +- glyph01631
    +
    +- glyph01632
    +
    +- glyph01633
    +
    +- glyph01634
    +
    +- glyph01635
    +
    +- glyph01636
    +
    +- glyph01637
    +
    +- glyph01638
    +
    +- glyph01639
    +
    +- glyph01640
    +
    +- glyph01641
    +
    +- glyph01642
    +
    +- glyph01643
    +
    +- glyph01644
    +
    +- glyph01645
    +
    +- glyph01646
    +
    +- glyph01647
    +
    +- glyph01648
    +
    +- glyph01649
    +
    +- glyph01650
    +
    +- glyph01651
    +
    +- glyph01652
    +
    +- glyph01653
    +
    +- glyph01654
    +
    +- glyph01655
    +
    +- glyph01656
    +
    +- glyph01657
    +
    +- glyph01658
    +
    +- glyph01659
    +
    +- glyph01660
    +
    +- glyph01661
    +
    +- glyph01662
    +
    +- glyph01663
    +
    +- glyph01664
    +
    +- glyph01665
    +
    +- glyph01666
    +
    +- glyph01667
    +
    +- glyph01668
    +
    +- glyph01669
    +
    +- glyph01670
    +
    +- glyph01671
    +
    +- glyph01672
    +
    +- glyph01673
    +
    +- glyph01674
    +
    +- glyph01675
    +
    +- glyph01676
    +
    +- glyph01677
    +
    +- glyph01678
    +
    +- glyph01679
    +
    +- glyph01680
    +
    +- glyph01681
    +
    +- glyph01682
    +
    +- glyph01683
    +
    +- glyph01684
    +
    +- glyph01685
    +
    +- glyph01686
    +
    +- glyph01687
    +
    +- glyph01688
    +
    +- glyph01689
    +
    +- glyph01690
    +
    +- glyph01691
    +
    +- glyph01692
    +
    +- glyph01693
    +
    +- glyph01694
    +
    +- glyph01695
    +
    +- glyph01696
    +
    +- glyph01697
    +
    +- glyph01698
    +
    +- glyph01699
    +
    +- glyph01700
    +
    +- glyph01701
    +
    +- glyph01702
    +
    +- glyph01703
    +
    +- glyph01704
    +
    +- glyph01705
    +
    +- glyph01706
    +
    +- glyph01707
    +
    +- glyph01708
    +
    +- glyph01709
    +
    +- glyph01710
    +
    +- glyph01711
    +
    +- glyph01712
    +
    +- glyph01713
    +
    +- glyph01714
    +
    +- glyph01715
    +
    +- glyph01716
    +
    +- glyph01717
    +
    +- glyph01718
    +
    +- glyph01719
    +
    +- glyph01720
    +
    +- glyph01721
    +
    +- glyph01722
    +
    +- glyph01723
    +
    +- glyph01724
    +
    +- glyph01725
    +
    +- glyph01726
    +
    +- glyph01727
    +
    +- glyph01728
    +
    +- glyph01729
    +
    +- glyph01730
    +
    +- glyph01731
    +
    +- glyph01732
    +
    +- glyph01733
    +
    +- glyph01734
    +
    +- glyph01735
    +
    +- glyph01736
    +
    +- glyph01737
    +
    +- glyph01738
    +
    +- glyph01739
    +
    +- glyph01740
    +
    +- glyph01741
    +
    +- glyph01742
    +
    +- glyph01743
    +
    +- glyph01744
    +
    +- glyph01745
    +
    +- glyph01746
    +
    +- glyph01747
    +
    +- glyph01748
    +
    +- glyph01749
    +
    +- glyph01750
    +
    +- glyph01751
    +
    +- glyph01752
    +
    +- glyph01753
    +
    +- glyph01754
    +
    +- glyph01755
    +
    +- glyph01756
    +
    +- glyph01757
    +
    +- glyph01758
    +
    +- glyph01759
    +
    +- glyph01760
    +
    +- glyph01761
    +
    +- glyph01762
    +
    +- glyph01763
    +
    +- glyph01764
    +
    +- glyph01765
    +
    +- glyph01786
    +
    +- glyph01823
    +
    +- glyph01824
    +
    +- glyph01825
    +
    +- glyph01826
    +
    +- glyph01827
    +
    +- glyph01828
    +
    +- glyph01829
    +
    +- glyph01830
    +
    +- glyph01831
    +
    +- glyph01832
    +
    +- glyph01833
    +
    +- glyph01834
    +
    +- glyph02314
    +
    +- glyph02339
    +
    +- glyph02371
    +
    +- glyph02502
    +
    +- glyph02783
    +
    +- glyph02784
    +
    +- glyph02791
    +
    +- glyph02814
    +
    +- glyph02817
    +
    +- glyph02820
    +
    +- glyph02828
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02837
    +
    +- glyph02842
    +
    +- glyph02860
    +
    +- glyph02866
    +
    +- glyph02871
    +
    +- glyph02874
    +
    +- glyph02877
    +
    +- glyph02883
    +
    +- glyph02889
    +
    +- glyph02893
    +
    +- glyph02896
    +
    +- glyph02900
    +
    +- glyph02903
    +
    +- glyph02905
    +
    +- glyph02908
    +
    +- glyph02911
    +
    +- glyph02914
    +
    +- glyph02917
    +
    +- glyph02920
    +
    +- glyph02923
    +
    +- glyph02926
    +
    +- glyph02929
    +
    +- glyph02932
    +
    +- glyph02936
    +
    +- glyph02939
    +
    +- glyph02942
    +
    +- glyph02945
    +
    +- glyph02948
    +
    +- glyph02951
    +
    +- glyph02953
    +
    +- glyph03007
    +
    +- glyph03010
    +
    +- glyph03013
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00305
    +
    +- glyph00363
    +
    +- glyph00468
    +
    +- glyph00470
    +
    +- glyph00472
    +
    +- glyph00474
    +
    +- glyph00494
    +
    +- glyph00495
    +
    +- glyph00496
    +
    +- glyph00507
    +
    +- glyph00511
    +
    +- glyph00512
    +
    +- glyph00515
    +
    +- glyph00516
    +
    +- glyph00517
    +
    +- glyph00519
    +
    +- glyph00520
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00529
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00533
    +
    +- glyph00534
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00539
    +
    +- glyph00540
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00550
    +
    +- glyph00551
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00556
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00566
    +
    +- glyph00567
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00572
    +
    +- glyph00573
    +
    +- glyph00574
    +
    +- glyph00922
    +
    +- glyph00947
    +
    +- glyph01108
    +
    +- glyph01110
    +
    +- glyph01112
    +
    +- glyph01113
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01152
    +
    +- glyph01162
    +
    +- glyph01174
    +
    +- glyph01198
    +
    +- glyph01233
    +
    +- glyph01237
    +
    +- glyph01238
    +
    +- glyph01246
    +
    +- glyph01247
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01314
    +
    +- glyph01315
    +
    +- glyph01349
    +
    +- glyph01350
    +
    +- glyph01363
    +
    +- glyph01364
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01379
    +
    +- glyph01415
    +
    +- glyph01421
    +
    +- glyph01424
    +
    +- glyph01425
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01441
    +
    +- glyph01461
    +
    +- glyph01462
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01479
    +
    +- glyph01480
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01549
    +
    +- glyph01550
    +
    +- glyph01556
    +
    +- glyph01557
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01571
    +
    +- glyph01572
    +
    +- glyph01573
    +
    +- glyph01574
    +
    +- glyph01575
    +
    +- glyph01576
    +
    +- glyph02084
    +
    +- glyph02110
    +
    +- glyph02143
    +
    +- glyph02276
    +
    +- glyph02557
    +
    +- glyph02558
    +
    +- glyph02564
    +
    +- glyph02587
    +
    +- glyph02590
    +
    +- glyph02593
    +
    +- glyph02601
    +
    +- glyph02605
    +
    +- glyph02606
    +
    +- glyph02610
    +
    +- glyph02615
    +
    +- glyph02627
    +
    +- glyph02635
    +
    +- glyph02641
    +
    +- glyph02646
    +
    +- glyph02649
    +
    +- glyph02652
    +
    +- glyph02658
    +
    +- glyph02664
    +
    +- glyph02668
    +
    +- glyph02671
    +
    +- glyph02675
    +
    +- glyph02678
    +
    +- glyph02680
    +
    +- glyph02683
    +
    +- glyph02686
    +
    +- glyph02689
    +
    +- glyph02692
    +
    +- glyph02695
    +
    +- glyph02698
    +
    +- glyph02701
    +
    +- glyph02704
    +
    +- glyph02707
    +
    +- glyph02711
    +
    +- glyph02714
    +
    +- glyph02717
    +
    +- glyph02720
    +
    +- glyph02723
    +
    +- glyph02726
    +
    +- glyph02728
    +
    +- glyph02782
    +
    +- glyph02785
    +
    +- glyph02788
    +
    +- glyph02794
    +
    +- glyph02805
    +
    +- glyph02806
    +
    +- glyph02807
    +
    +- glyph02808
    +
    +- glyph02810
    +
    +- glyph02811
    +
    +- glyph02812
    +
    +- glyph02813
    +
    +- glyph02814
    +
    +- glyph02815
    +
    +- glyph02816
    +
    +- glyph02817
    +
    +- glyph02818
    +
    +- glyph02820
    +
    +- glyph02821
    +
    +- glyph02822
    +
    +- glyph02823
    +
    +- glyph02824
    +
    +- glyph02825
    +
    +- glyph02826
    +
    +- glyph02827
    +
    +- glyph02828
    +
    +- glyph02829
    +
    +- glyph02830
    +
    +- glyph02831
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02834
    +
    +- glyph02835
    +
    +- glyph02836
    +
    +- glyph02837
    +
    +- glyph02838
    +
    +- glyph02839
    +
    +- glyph02840
    +
    +- glyph02841
    +
    +- glyph02842
    +
    +- glyph02843
    +
    +- glyph02844
    +
    +- glyph02845
    +
    +- glyph02846
    +
    +- glyph02847
    +
    +- glyph02848
    +
    +- glyph02849
    +
    +- glyph02850
    +
    +- glyph02851
    +
    +- glyph02852
    +
    +- glyph02853
    +
    +- glyph02854
    +
    +- glyph02855
    +
    +- glyph02856
    +
    +- glyph02857
    +
    +- glyph02858
    +
    +- glyph02859
    +
    +- glyph02860
    +
    +- glyph02861
    +
    +- glyph02862
    +
    +- glyph02863
    +
    +- glyph02864
    +
    +- glyph02865
    +
    +- glyph02866
    +
    +- glyph02867
    +
    +- glyph02868
    +
    +- glyph02869
    +
    +- glyph02870
    +
    +- glyph02871
    +
    +- glyph02872
    +
    +- glyph02873
    +
    +- glyph02874
    +
    +- glyph02875
    +
    +- glyph02876
    +
    +- glyph02877
    +
    +- glyph02878
    +
    +- glyph02879
    +
    +- glyph02880
    +
    +- glyph02881
    +
    +- glyph02882
    +
    +- glyph02883
    +
    +- glyph02884
    +
    +- glyph02885
    +
    +- glyph02886
    +
    +- glyph02887
    +
    +- glyph02888
    +
    +- glyph02889
    +
    +- glyph02890
    +
    +- glyph02891
    +
    +- glyph02892
    +
    +- glyph02893
    +
    +- glyph02894
    +
    +- glyph02895
    +
    +- glyph02896
    +
    +- glyph02897
    +
    +- glyph02898
    +
    +- glyph02899
    +
    +- glyph02900
    +
    +- glyph02901
    +
    +- glyph02902
    +
    +- glyph02903
    +
    +- glyph02904
    +
    +- glyph02905
    +
    +- glyph02906
    +
    +- glyph02907
    +
    +- glyph02908
    +
    +- glyph02909
    +
    +- glyph02910
    +
    +- glyph02911
    +
    +- glyph02912
    +
    +- glyph02913
    +
    +- glyph02914
    +
    +- glyph02915
    +
    +- glyph02916
    +
    +- glyph02917
    +
    +- glyph02918
    +
    +- glyph02919
    +
    +- glyph02920
    +
    +- glyph02921
    +
    +- glyph02922
    +
    +- glyph02923
    +
    +- glyph02924
    +
    +- glyph02925
    +
    +- glyph02926
    +
    +- glyph02927
    +
    +- glyph02928
    +
    +- glyph02929
    +
    +- glyph02930
    +
    +- glyph02931
    +
    +- glyph02932
    +
    +- glyph02933
    +
    +- glyph02934
    +
    +- glyph02935
    +
    +- glyph02936
    +
    +- glyph02937
    +
    +- glyph02938
    +
    +- glyph02939
    +
    +- glyph02940
    +
    +- glyph02941
    +
    +- glyph02942
    +
    +- glyph02943
    +
    +- glyph02944
    +
    +- glyph02945
    +
    +- glyph02946
    +
    +- glyph02947
    +
    +- glyph02948
    +
    +- glyph02949
    +
    +- glyph02950
    +
    +- glyph02951
    +
    +- glyph02952
    +
    +- glyph02953
    +
    +- glyph02954
    +
    +- glyph02955
    +
    +- glyph02956
    +
    +- glyph02957
    +
    +- glyph02958
    +
    +- glyph02959
    +
    +- glyph03006
    +
    +- glyph03007
    +
    +- glyph03008
    +
    +- glyph03009
    +
    +- glyph03010
    +
    +- glyph03011
    +
    +- glyph03012
    +
    +- glyph03013
    +
    +- glyph03014
    +
    +- glyph03015
    +
    +- glyph03016
    +
    +- glyph03017
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00306
    +
    +- glyph00365
    +
    +- glyph00469
    +
    +- glyph00471
    +
    +- glyph00473
    +
    +- glyph00475
    +
    +- glyph00496
    +
    +- glyph00497
    +
    +- glyph00498
    +
    +- glyph00509
    +
    +- glyph00513
    +
    +- glyph00514
    +
    +- glyph00517
    +
    +- glyph00518
    +
    +- glyph00519
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00525
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00532
    +
    +- glyph00533
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00538
    +
    +- glyph00539
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00549
    +
    +- glyph00550
    +
    +- glyph00552
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00565
    +
    +- glyph00566
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00571
    +
    +- glyph00572
    +
    +- glyph00574
    +
    +- glyph00575
    +
    +- glyph00576
    +
    +- glyph00924
    +
    +- glyph00949
    +
    +- glyph01110
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01116
    +
    +- glyph01117
    +
    +- glyph01154
    +
    +- glyph01164
    +
    +- glyph01176
    +
    +- glyph01200
    +
    +- glyph01235
    +
    +- glyph01239
    +
    +- glyph01240
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01255
    +
    +- glyph01256
    +
    +- glyph01316
    +
    +- glyph01317
    +
    +- glyph01325
    +
    +- glyph01351
    +
    +- glyph01352
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01367
    +
    +- glyph01368
    +
    +- glyph01381
    +
    +- glyph01417
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01438
    +
    +- glyph01439
    +
    +- glyph01443
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01468
    +
    +- glyph01469
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01483
    +
    +- glyph01484
    +
    +- glyph01551
    +
    +- glyph01552
    +
    +- glyph01560
    +
    +- glyph01562
    +
    +- glyph01564
    +
    +- glyph01565
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01569
    +
    +- glyph01600
    +
    +- glyph01611
    +
    +- glyph01612
    +
    +- glyph01613
    +
    +- glyph01614
    +
    +- glyph01616
    +
    +- glyph01617
    +
    +- glyph01618
    +
    +- glyph01619
    +
    +- glyph01620
    +
    +- glyph01621
    +
    +- glyph01622
    +
    +- glyph01623
    +
    +- glyph01624
    +
    +- glyph01626
    +
    +- glyph01627
    +
    +- glyph01628
    +
    +- glyph01629
    +
    +- glyph01630
    +
    +- glyph01631
    +
    +- glyph01632
    +
    +- glyph01633
    +
    +- glyph01634
    +
    +- glyph01635
    +
    +- glyph01636
    +
    +- glyph01637
    +
    +- glyph01638
    +
    +- glyph01639
    +
    +- glyph01640
    +
    +- glyph01641
    +
    +- glyph01642
    +
    +- glyph01643
    +
    +- glyph01644
    +
    +- glyph01645
    +
    +- glyph01646
    +
    +- glyph01647
    +
    +- glyph01648
    +
    +- glyph01649
    +
    +- glyph01650
    +
    +- glyph01651
    +
    +- glyph01652
    +
    +- glyph01653
    +
    +- glyph01654
    +
    +- glyph01655
    +
    +- glyph01656
    +
    +- glyph01657
    +
    +- glyph01658
    +
    +- glyph01659
    +
    +- glyph01660
    +
    +- glyph01661
    +
    +- glyph01662
    +
    +- glyph01663
    +
    +- glyph01664
    +
    +- glyph01665
    +
    +- glyph01666
    +
    +- glyph01667
    +
    +- glyph01668
    +
    +- glyph01669
    +
    +- glyph01670
    +
    +- glyph01671
    +
    +- glyph01672
    +
    +- glyph01673
    +
    +- glyph01674
    +
    +- glyph01675
    +
    +- glyph01676
    +
    +- glyph01677
    +
    +- glyph01678
    +
    +- glyph01679
    +
    +- glyph01680
    +
    +- glyph01681
    +
    +- glyph01682
    +
    +- glyph01683
    +
    +- glyph01684
    +
    +- glyph01685
    +
    +- glyph01686
    +
    +- glyph01687
    +
    +- glyph01688
    +
    +- glyph01689
    +
    +- glyph01690
    +
    +- glyph01691
    +
    +- glyph01692
    +
    +- glyph01693
    +
    +- glyph01694
    +
    +- glyph01695
    +
    +- glyph01696
    +
    +- glyph01697
    +
    +- glyph01698
    +
    +- glyph01699
    +
    +- glyph01700
    +
    +- glyph01701
    +
    +- glyph01702
    +
    +- glyph01703
    +
    +- glyph01704
    +
    +- glyph01705
    +
    +- glyph01706
    +
    +- glyph01707
    +
    +- glyph01708
    +
    +- glyph01709
    +
    +- glyph01710
    +
    +- glyph01711
    +
    +- glyph01712
    +
    +- glyph01713
    +
    +- glyph01714
    +
    +- glyph01715
    +
    +- glyph01716
    +
    +- glyph01717
    +
    +- glyph01718
    +
    +- glyph01719
    +
    +- glyph01720
    +
    +- glyph01721
    +
    +- glyph01722
    +
    +- glyph01723
    +
    +- glyph01724
    +
    +- glyph01725
    +
    +- glyph01726
    +
    +- glyph01727
    +
    +- glyph01728
    +
    +- glyph01729
    +
    +- glyph01730
    +
    +- glyph01731
    +
    +- glyph01732
    +
    +- glyph01733
    +
    +- glyph01734
    +
    +- glyph01735
    +
    +- glyph01736
    +
    +- glyph01737
    +
    +- glyph01738
    +
    +- glyph01739
    +
    +- glyph01740
    +
    +- glyph01741
    +
    +- glyph01742
    +
    +- glyph01743
    +
    +- glyph01744
    +
    +- glyph01745
    +
    +- glyph01746
    +
    +- glyph01747
    +
    +- glyph01748
    +
    +- glyph01749
    +
    +- glyph01750
    +
    +- glyph01751
    +
    +- glyph01752
    +
    +- glyph01753
    +
    +- glyph01754
    +
    +- glyph01755
    +
    +- glyph01756
    +
    +- glyph01757
    +
    +- glyph01758
    +
    +- glyph01759
    +
    +- glyph01760
    +
    +- glyph01761
    +
    +- glyph01762
    +
    +- glyph01763
    +
    +- glyph01764
    +
    +- glyph01765
    +
    +- glyph01786
    +
    +- glyph01823
    +
    +- glyph01824
    +
    +- glyph01825
    +
    +- glyph01826
    +
    +- glyph01827
    +
    +- glyph01828
    +
    +- glyph01829
    +
    +- glyph01830
    +
    +- glyph01831
    +
    +- glyph01832
    +
    +- glyph01833
    +
    +- glyph01834
    +
    +- glyph02314
    +
    +- glyph02339
    +
    +- glyph02371
    +
    +- glyph02502
    +
    +- glyph02783
    +
    +- glyph02784
    +
    +- glyph02791
    +
    +- glyph02814
    +
    +- glyph02817
    +
    +- glyph02820
    +
    +- glyph02828
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02837
    +
    +- glyph02842
    +
    +- glyph02860
    +
    +- glyph02866
    +
    +- glyph02871
    +
    +- glyph02874
    +
    +- glyph02877
    +
    +- glyph02883
    +
    +- glyph02889
    +
    +- glyph02893
    +
    +- glyph02896
    +
    +- glyph02900
    +
    +- glyph02903
    +
    +- glyph02905
    +
    +- glyph02908
    +
    +- glyph02911
    +
    +- glyph02914
    +
    +- glyph02917
    +
    +- glyph02920
    +
    +- glyph02923
    +
    +- glyph02926
    +
    +- glyph02929
    +
    +- glyph02932
    +
    +- glyph02936
    +
    +- glyph02939
    +
    +- glyph02942
    +
    +- glyph02945
    +
    +- glyph02948
    +
    +- glyph02951
    +
    +- glyph02953
    +
    +- glyph03007
    +
    +- glyph03010
    +
    +- glyph03013
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00305
    +
    +- glyph00363
    +
    +- glyph00467
    +
    +- glyph00468
    +
    +- glyph00469
    +
    +- glyph00470
    +
    +- glyph00471
    +
    +- glyph00472
    +
    +- glyph00473
    +
    +- glyph00474
    +
    +- glyph00494
    +
    +- glyph00495
    +
    +- glyph00496
    +
    +- glyph00507
    +
    +- glyph00511
    +
    +- glyph00512
    +
    +- glyph00515
    +
    +- glyph00516
    +
    +- glyph00517
    +
    +- glyph00519
    +
    +- glyph00520
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00529
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00533
    +
    +- glyph00534
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00539
    +
    +- glyph00540
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00550
    +
    +- glyph00551
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00556
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00566
    +
    +- glyph00567
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00572
    +
    +- glyph00573
    +
    +- glyph00574
    +
    +- glyph00922
    +
    +- glyph00947
    +
    +- glyph01108
    +
    +- glyph01112
    +
    +- glyph01113
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01152
    +
    +- glyph01162
    +
    +- glyph01174
    +
    +- glyph01198
    +
    +- glyph01233
    +
    +- glyph01237
    +
    +- glyph01238
    +
    +- glyph01246
    +
    +- glyph01247
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01314
    +
    +- glyph01315
    +
    +- glyph01318
    +
    +- glyph01349
    +
    +- glyph01350
    +
    +- glyph01363
    +
    +- glyph01364
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01379
    +
    +- glyph01415
    +
    +- glyph01422
    +
    +- glyph01424
    +
    +- glyph01425
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01441
    +
    +- glyph01461
    +
    +- glyph01462
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01479
    +
    +- glyph01480
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01549
    +
    +- glyph01550
    +
    +- glyph01555
    +
    +- glyph01556
    +
    +- glyph01557
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01571
    +
    +- glyph01572
    +
    +- glyph01573
    +
    +- glyph01574
    +
    +- glyph01575
    +
    +- glyph01576
    +
    +- glyph02084
    +
    +- glyph02110
    +
    +- glyph02143
    +
    +- glyph02276
    +
    +- glyph02557
    +
    +- glyph02558
    +
    +- glyph02564
    +
    +- glyph02587
    +
    +- glyph02590
    +
    +- glyph02593
    +
    +- glyph02601
    +
    +- glyph02605
    +
    +- glyph02606
    +
    +- glyph02610
    +
    +- glyph02615
    +
    +- glyph02627
    +
    +- glyph02635
    +
    +- glyph02641
    +
    +- glyph02646
    +
    +- glyph02649
    +
    +- glyph02652
    +
    +- glyph02658
    +
    +- glyph02664
    +
    +- glyph02668
    +
    +- glyph02671
    +
    +- glyph02675
    +
    +- glyph02678
    +
    +- glyph02680
    +
    +- glyph02683
    +
    +- glyph02686
    +
    +- glyph02689
    +
    +- glyph02692
    +
    +- glyph02695
    +
    +- glyph02698
    +
    +- glyph02701
    +
    +- glyph02704
    +
    +- glyph02707
    +
    +- glyph02711
    +
    +- glyph02714
    +
    +- glyph02717
    +
    +- glyph02720
    +
    +- glyph02723
    +
    +- glyph02726
    +
    +- glyph02728
    +
    +- glyph02782
    +
    +- glyph02785
    +
    +- glyph02788
    +
    +- glyph02794
    +
    +- glyph02805
    +
    +- glyph02806
    +
    +- glyph02807
    +
    +- glyph02808
    +
    +- glyph02810
    +
    +- glyph02811
    +
    +- glyph02812
    +
    +- glyph02813
    +
    +- glyph02814
    +
    +- glyph02815
    +
    +- glyph02816
    +
    +- glyph02817
    +
    +- glyph02818
    +
    +- glyph02820
    +
    +- glyph02821
    +
    +- glyph02822
    +
    +- glyph02823
    +
    +- glyph02824
    +
    +- glyph02825
    +
    +- glyph02826
    +
    +- glyph02827
    +
    +- glyph02828
    +
    +- glyph02829
    +
    +- glyph02830
    +
    +- glyph02831
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02834
    +
    +- glyph02835
    +
    +- glyph02836
    +
    +- glyph02837
    +
    +- glyph02838
    +
    +- glyph02839
    +
    +- glyph02840
    +
    +- glyph02841
    +
    +- glyph02842
    +
    +- glyph02843
    +
    +- glyph02844
    +
    +- glyph02845
    +
    +- glyph02846
    +
    +- glyph02847
    +
    +- glyph02848
    +
    +- glyph02849
    +
    +- glyph02850
    +
    +- glyph02851
    +
    +- glyph02852
    +
    +- glyph02853
    +
    +- glyph02854
    +
    +- glyph02855
    +
    +- glyph02856
    +
    +- glyph02857
    +
    +- glyph02858
    +
    +- glyph02859
    +
    +- glyph02860
    +
    +- glyph02861
    +
    +- glyph02862
    +
    +- glyph02863
    +
    +- glyph02864
    +
    +- glyph02865
    +
    +- glyph02866
    +
    +- glyph02867
    +
    +- glyph02868
    +
    +- glyph02869
    +
    +- glyph02870
    +
    +- glyph02871
    +
    +- glyph02872
    +
    +- glyph02873
    +
    +- glyph02874
    +
    +- glyph02875
    +
    +- glyph02876
    +
    +- glyph02877
    +
    +- glyph02878
    +
    +- glyph02879
    +
    +- glyph02880
    +
    +- glyph02881
    +
    +- glyph02882
    +
    +- glyph02883
    +
    +- glyph02884
    +
    +- glyph02885
    +
    +- glyph02886
    +
    +- glyph02887
    +
    +- glyph02888
    +
    +- glyph02889
    +
    +- glyph02890
    +
    +- glyph02891
    +
    +- glyph02892
    +
    +- glyph02893
    +
    +- glyph02894
    +
    +- glyph02895
    +
    +- glyph02896
    +
    +- glyph02897
    +
    +- glyph02898
    +
    +- glyph02899
    +
    +- glyph02900
    +
    +- glyph02901
    +
    +- glyph02902
    +
    +- glyph02903
    +
    +- glyph02904
    +
    +- glyph02905
    +
    +- glyph02906
    +
    +- glyph02907
    +
    +- glyph02908
    +
    +- glyph02909
    +
    +- glyph02910
    +
    +- glyph02911
    +
    +- glyph02912
    +
    +- glyph02913
    +
    +- glyph02914
    +
    +- glyph02915
    +
    +- glyph02916
    +
    +- glyph02917
    +
    +- glyph02918
    +
    +- glyph02919
    +
    +- glyph02920
    +
    +- glyph02921
    +
    +- glyph02922
    +
    +- glyph02923
    +
    +- glyph02924
    +
    +- glyph02925
    +
    +- glyph02926
    +
    +- glyph02927
    +
    +- glyph02928
    +
    +- glyph02929
    +
    +- glyph02930
    +
    +- glyph02931
    +
    +- glyph02932
    +
    +- glyph02933
    +
    +- glyph02934
    +
    +- glyph02935
    +
    +- glyph02936
    +
    +- glyph02937
    +
    +- glyph02938
    +
    +- glyph02939
    +
    +- glyph02940
    +
    +- glyph02941
    +
    +- glyph02942
    +
    +- glyph02943
    +
    +- glyph02944
    +
    +- glyph02945
    +
    +- glyph02946
    +
    +- glyph02947
    +
    +- glyph02948
    +
    +- glyph02949
    +
    +- glyph02950
    +
    +- glyph02951
    +
    +- glyph02952
    +
    +- glyph02953
    +
    +- glyph02954
    +
    +- glyph02955
    +
    +- glyph02956
    +
    +- glyph02957
    +
    +- glyph02958
    +
    +- glyph02959
    +
    +- glyph03006
    +
    +- glyph03007
    +
    +- glyph03008
    +
    +- glyph03009
    +
    +- glyph03010
    +
    +- glyph03011
    +
    +- glyph03012
    +
    +- glyph03013
    +
    +- glyph03014
    +
    +- glyph03015
    +
    +- glyph03016
    +
    +- glyph03017
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00305
    +
    +- glyph00363
    +
    +- glyph00467
    +
    +- glyph00468
    +
    +- glyph00469
    +
    +- glyph00470
    +
    +- glyph00471
    +
    +- glyph00472
    +
    +- glyph00473
    +
    +- glyph00474
    +
    +- glyph00494
    +
    +- glyph00495
    +
    +- glyph00496
    +
    +- glyph00507
    +
    +- glyph00511
    +
    +- glyph00512
    +
    +- glyph00515
    +
    +- glyph00516
    +
    +- glyph00517
    +
    +- glyph00519
    +
    +- glyph00520
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00529
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00533
    +
    +- glyph00534
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00539
    +
    +- glyph00540
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00550
    +
    +- glyph00551
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00556
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00566
    +
    +- glyph00567
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00572
    +
    +- glyph00573
    +
    +- glyph00574
    +
    +- glyph00922
    +
    +- glyph00947
    +
    +- glyph01108
    +
    +- glyph01112
    +
    +- glyph01113
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01152
    +
    +- glyph01162
    +
    +- glyph01174
    +
    +- glyph01198
    +
    +- glyph01233
    +
    +- glyph01237
    +
    +- glyph01238
    +
    +- glyph01246
    +
    +- glyph01247
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01314
    +
    +- glyph01315
    +
    +- glyph01349
    +
    +- glyph01350
    +
    +- glyph01363
    +
    +- glyph01364
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01379
    +
    +- glyph01415
    +
    +- glyph01422
    +
    +- glyph01424
    +
    +- glyph01425
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01441
    +
    +- glyph01461
    +
    +- glyph01462
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01479
    +
    +- glyph01480
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01549
    +
    +- glyph01550
    +
    +- glyph01555
    +
    +- glyph01556
    +
    +- glyph01557
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01571
    +
    +- glyph01572
    +
    +- glyph01573
    +
    +- glyph01574
    +
    +- glyph01575
    +
    +- glyph01576
    +
    +- glyph02084
    +
    +- glyph02110
    +
    +- glyph02143
    +
    +- glyph02276
    +
    +- glyph02557
    +
    +- glyph02558
    +
    +- glyph02564
    +
    +- glyph02587
    +
    +- glyph02590
    +
    +- glyph02593
    +
    +- glyph02601
    +
    +- glyph02605
    +
    +- glyph02606
    +
    +- glyph02610
    +
    +- glyph02615
    +
    +- glyph02627
    +
    +- glyph02635
    +
    +- glyph02641
    +
    +- glyph02646
    +
    +- glyph02649
    +
    +- glyph02652
    +
    +- glyph02658
    +
    +- glyph02664
    +
    +- glyph02668
    +
    +- glyph02671
    +
    +- glyph02675
    +
    +- glyph02678
    +
    +- glyph02680
    +
    +- glyph02683
    +
    +- glyph02686
    +
    +- glyph02689
    +
    +- glyph02692
    +
    +- glyph02695
    +
    +- glyph02698
    +
    +- glyph02701
    +
    +- glyph02704
    +
    +- glyph02707
    +
    +- glyph02711
    +
    +- glyph02714
    +
    +- glyph02717
    +
    +- glyph02720
    +
    +- glyph02723
    +
    +- glyph02726
    +
    +- glyph02728
    +
    +- glyph02782
    +
    +- glyph02785
    +
    +- glyph02788
    +
    +- glyph02794
    +
    +- glyph02805
    +
    +- glyph02806
    +
    +- glyph02807
    +
    +- glyph02808
    +
    +- glyph02810
    +
    +- glyph02811
    +
    +- glyph02812
    +
    +- glyph02813
    +
    +- glyph02814
    +
    +- glyph02815
    +
    +- glyph02816
    +
    +- glyph02817
    +
    +- glyph02818
    +
    +- glyph02820
    +
    +- glyph02821
    +
    +- glyph02822
    +
    +- glyph02823
    +
    +- glyph02824
    +
    +- glyph02825
    +
    +- glyph02826
    +
    +- glyph02827
    +
    +- glyph02828
    +
    +- glyph02829
    +
    +- glyph02830
    +
    +- glyph02831
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02834
    +
    +- glyph02835
    +
    +- glyph02836
    +
    +- glyph02837
    +
    +- glyph02838
    +
    +- glyph02839
    +
    +- glyph02840
    +
    +- glyph02841
    +
    +- glyph02842
    +
    +- glyph02843
    +
    +- glyph02844
    +
    +- glyph02845
    +
    +- glyph02846
    +
    +- glyph02847
    +
    +- glyph02848
    +
    +- glyph02849
    +
    +- glyph02850
    +
    +- glyph02851
    +
    +- glyph02852
    +
    +- glyph02853
    +
    +- glyph02854
    +
    +- glyph02855
    +
    +- glyph02856
    +
    +- glyph02857
    +
    +- glyph02858
    +
    +- glyph02859
    +
    +- glyph02860
    +
    +- glyph02861
    +
    +- glyph02862
    +
    +- glyph02863
    +
    +- glyph02864
    +
    +- glyph02865
    +
    +- glyph02866
    +
    +- glyph02867
    +
    +- glyph02868
    +
    +- glyph02869
    +
    +- glyph02870
    +
    +- glyph02871
    +
    +- glyph02872
    +
    +- glyph02873
    +
    +- glyph02874
    +
    +- glyph02875
    +
    +- glyph02876
    +
    +- glyph02877
    +
    +- glyph02878
    +
    +- glyph02879
    +
    +- glyph02880
    +
    +- glyph02881
    +
    +- glyph02882
    +
    +- glyph02883
    +
    +- glyph02884
    +
    +- glyph02885
    +
    +- glyph02886
    +
    +- glyph02887
    +
    +- glyph02888
    +
    +- glyph02889
    +
    +- glyph02890
    +
    +- glyph02891
    +
    +- glyph02892
    +
    +- glyph02893
    +
    +- glyph02894
    +
    +- glyph02895
    +
    +- glyph02896
    +
    +- glyph02897
    +
    +- glyph02898
    +
    +- glyph02899
    +
    +- glyph02900
    +
    +- glyph02901
    +
    +- glyph02902
    +
    +- glyph02903
    +
    +- glyph02904
    +
    +- glyph02905
    +
    +- glyph02906
    +
    +- glyph02907
    +
    +- glyph02908
    +
    +- glyph02909
    +
    +- glyph02910
    +
    +- glyph02911
    +
    +- glyph02912
    +
    +- glyph02913
    +
    +- glyph02914
    +
    +- glyph02915
    +
    +- glyph02916
    +
    +- glyph02917
    +
    +- glyph02918
    +
    +- glyph02919
    +
    +- glyph02920
    +
    +- glyph02921
    +
    +- glyph02922
    +
    +- glyph02923
    +
    +- glyph02924
    +
    +- glyph02925
    +
    +- glyph02926
    +
    +- glyph02927
    +
    +- glyph02928
    +
    +- glyph02929
    +
    +- glyph02930
    +
    +- glyph02931
    +
    +- glyph02932
    +
    +- glyph02933
    +
    +- glyph02934
    +
    +- glyph02935
    +
    +- glyph02936
    +
    +- glyph02937
    +
    +- glyph02938
    +
    +- glyph02939
    +
    +- glyph02940
    +
    +- glyph02941
    +
    +- glyph02942
    +
    +- glyph02943
    +
    +- glyph02944
    +
    +- glyph02945
    +
    +- glyph02946
    +
    +- glyph02947
    +
    +- glyph02948
    +
    +- glyph02949
    +
    +- glyph02950
    +
    +- glyph02951
    +
    +- glyph02952
    +
    +- glyph02953
    +
    +- glyph02954
    +
    +- glyph02955
    +
    +- glyph02956
    +
    +- glyph02957
    +
    +- glyph02958
    +
    +- glyph02959
    +
    +- glyph03006
    +
    +- glyph03007
    +
    +- glyph03008
    +
    +- glyph03009
    +
    +- glyph03010
    +
    +- glyph03011
    +
    +- glyph03012
    +
    +- glyph03013
    +
    +- glyph03014
    +
    +- glyph03015
    +
    +- glyph03016
    +
    +- glyph03017
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00306
    +
    +- glyph00365
    +
    +- glyph00469
    +
    +- glyph00471
    +
    +- glyph00473
    +
    +- glyph00475
    +
    +- glyph00496
    +
    +- glyph00497
    +
    +- glyph00498
    +
    +- glyph00509
    +
    +- glyph00513
    +
    +- glyph00514
    +
    +- glyph00517
    +
    +- glyph00518
    +
    +- glyph00519
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00525
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00532
    +
    +- glyph00533
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00538
    +
    +- glyph00539
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00549
    +
    +- glyph00550
    +
    +- glyph00552
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00565
    +
    +- glyph00566
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00571
    +
    +- glyph00572
    +
    +- glyph00574
    +
    +- glyph00575
    +
    +- glyph00576
    +
    +- glyph00924
    +
    +- glyph00949
    +
    +- glyph01110
    +
    +- glyph01112
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01116
    +
    +- glyph01117
    +
    +- glyph01154
    +
    +- glyph01164
    +
    +- glyph01176
    +
    +- glyph01200
    +
    +- glyph01235
    +
    +- glyph01239
    +
    +- glyph01240
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01255
    +
    +- glyph01256
    +
    +- glyph01316
    +
    +- glyph01317
    +
    +- glyph01351
    +
    +- glyph01352
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01367
    +
    +- glyph01368
    +
    +- glyph01381
    +
    +- glyph01417
    +
    +- glyph01423
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01438
    +
    +- glyph01439
    +
    +- glyph01443
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01468
    +
    +- glyph01469
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01483
    +
    +- glyph01484
    +
    +- glyph01551
    +
    +- glyph01552
    +
    +- glyph01560
    +
    +- glyph01562
    +
    +- glyph01564
    +
    +- glyph01565
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01569
    +
    +- glyph01600
    +
    +- glyph01611
    +
    +- glyph01612
    +
    +- glyph01613
    +
    +- glyph01614
    +
    +- glyph01616
    +
    +- glyph01617
    +
    +- glyph01618
    +
    +- glyph01619
    +
    +- glyph01620
    +
    +- glyph01621
    +
    +- glyph01622
    +
    +- glyph01623
    +
    +- glyph01624
    +
    +- glyph01626
    +
    +- glyph01627
    +
    +- glyph01628
    +
    +- glyph01629
    +
    +- glyph01630
    +
    +- glyph01631
    +
    +- glyph01632
    +
    +- glyph01633
    +
    +- glyph01634
    +
    +- glyph01635
    +
    +- glyph01636
    +
    +- glyph01637
    +
    +- glyph01638
    +
    +- glyph01639
    +
    +- glyph01640
    +
    +- glyph01641
    +
    +- glyph01642
    +
    +- glyph01643
    +
    +- glyph01644
    +
    +- glyph01645
    +
    +- glyph01646
    +
    +- glyph01647
    +
    +- glyph01648
    +
    +- glyph01649
    +
    +- glyph01650
    +
    +- glyph01651
    +
    +- glyph01652
    +
    +- glyph01653
    +
    +- glyph01654
    +
    +- glyph01655
    +
    +- glyph01656
    +
    +- glyph01657
    +
    +- glyph01658
    +
    +- glyph01659
    +
    +- glyph01660
    +
    +- glyph01661
    +
    +- glyph01662
    +
    +- glyph01663
    +
    +- glyph01664
    +
    +- glyph01665
    +
    +- glyph01666
    +
    +- glyph01667
    +
    +- glyph01668
    +
    +- glyph01669
    +
    +- glyph01670
    +
    +- glyph01671
    +
    +- glyph01672
    +
    +- glyph01673
    +
    +- glyph01674
    +
    +- glyph01675
    +
    +- glyph01676
    +
    +- glyph01677
    +
    +- glyph01678
    +
    +- glyph01679
    +
    +- glyph01680
    +
    +- glyph01681
    +
    +- glyph01682
    +
    +- glyph01683
    +
    +- glyph01684
    +
    +- glyph01685
    +
    +- glyph01686
    +
    +- glyph01687
    +
    +- glyph01688
    +
    +- glyph01689
    +
    +- glyph01690
    +
    +- glyph01691
    +
    +- glyph01692
    +
    +- glyph01693
    +
    +- glyph01694
    +
    +- glyph01695
    +
    +- glyph01696
    +
    +- glyph01697
    +
    +- glyph01698
    +
    +- glyph01699
    +
    +- glyph01700
    +
    +- glyph01701
    +
    +- glyph01702
    +
    +- glyph01703
    +
    +- glyph01704
    +
    +- glyph01705
    +
    +- glyph01706
    +
    +- glyph01707
    +
    +- glyph01708
    +
    +- glyph01709
    +
    +- glyph01710
    +
    +- glyph01711
    +
    +- glyph01712
    +
    +- glyph01713
    +
    +- glyph01714
    +
    +- glyph01715
    +
    +- glyph01716
    +
    +- glyph01717
    +
    +- glyph01718
    +
    +- glyph01719
    +
    +- glyph01720
    +
    +- glyph01721
    +
    +- glyph01722
    +
    +- glyph01723
    +
    +- glyph01724
    +
    +- glyph01725
    +
    +- glyph01726
    +
    +- glyph01727
    +
    +- glyph01728
    +
    +- glyph01729
    +
    +- glyph01730
    +
    +- glyph01731
    +
    +- glyph01732
    +
    +- glyph01733
    +
    +- glyph01734
    +
    +- glyph01735
    +
    +- glyph01736
    +
    +- glyph01737
    +
    +- glyph01738
    +
    +- glyph01739
    +
    +- glyph01740
    +
    +- glyph01741
    +
    +- glyph01742
    +
    +- glyph01743
    +
    +- glyph01744
    +
    +- glyph01745
    +
    +- glyph01746
    +
    +- glyph01747
    +
    +- glyph01748
    +
    +- glyph01749
    +
    +- glyph01750
    +
    +- glyph01751
    +
    +- glyph01752
    +
    +- glyph01753
    +
    +- glyph01754
    +
    +- glyph01755
    +
    +- glyph01756
    +
    +- glyph01757
    +
    +- glyph01758
    +
    +- glyph01759
    +
    +- glyph01760
    +
    +- glyph01761
    +
    +- glyph01762
    +
    +- glyph01763
    +
    +- glyph01764
    +
    +- glyph01765
    +
    +- glyph01786
    +
    +- glyph01823
    +
    +- glyph01824
    +
    +- glyph01825
    +
    +- glyph01826
    +
    +- glyph01827
    +
    +- glyph01828
    +
    +- glyph01829
    +
    +- glyph01830
    +
    +- glyph01831
    +
    +- glyph01832
    +
    +- glyph01833
    +
    +- glyph01834
    +
    +- glyph02314
    +
    +- glyph02339
    +
    +- glyph02371
    +
    +- glyph02502
    +
    +- glyph02783
    +
    +- glyph02784
    +
    +- glyph02791
    +
    +- glyph02814
    +
    +- glyph02817
    +
    +- glyph02820
    +
    +- glyph02828
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02837
    +
    +- glyph02842
    +
    +- glyph02860
    +
    +- glyph02866
    +
    +- glyph02871
    +
    +- glyph02874
    +
    +- glyph02877
    +
    +- glyph02883
    +
    +- glyph02889
    +
    +- glyph02893
    +
    +- glyph02896
    +
    +- glyph02900
    +
    +- glyph02903
    +
    +- glyph02905
    +
    +- glyph02908
    +
    +- glyph02911
    +
    +- glyph02914
    +
    +- glyph02917
    +
    +- glyph02920
    +
    +- glyph02923
    +
    +- glyph02926
    +
    +- glyph02929
    +
    +- glyph02932
    +
    +- glyph02936
    +
    +- glyph02939
    +
    +- glyph02942
    +
    +- glyph02945
    +
    +- glyph02948
    +
    +- glyph02951
    +
    +- glyph02953
    +
    +- glyph03007
    +
    +- glyph03010
    +
    +- glyph03013
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00189
    +
    +- glyph00305
    +
    +- glyph00363
    +
    +- glyph00467
    +
    +- glyph00469
    +
    +- glyph00471
    +
    +- glyph00473
    +
    +- glyph00476
    +
    +- glyph00478
    +
    +- glyph00480
    +
    +- glyph00482
    +
    +- glyph00494
    +
    +- glyph00495
    +
    +- glyph00496
    +
    +- glyph00507
    +
    +- glyph00511
    +
    +- glyph00512
    +
    +- glyph00515
    +
    +- glyph00516
    +
    +- glyph00517
    +
    +- glyph00519
    +
    +- glyph00520
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00529
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00533
    +
    +- glyph00534
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00539
    +
    +- glyph00540
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00550
    +
    +- glyph00551
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00556
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00566
    +
    +- glyph00567
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00572
    +
    +- glyph00573
    +
    +- glyph00574
    +
    +- glyph00922
    +
    +- glyph00947
    +
    +- glyph01108
    +
    +- glyph01110
    +
    +- glyph01112
    +
    +- glyph01113
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01152
    +
    +- glyph01162
    +
    +- glyph01174
    +
    +- glyph01198
    +
    +- glyph01233
    +
    +- glyph01237
    +
    +- glyph01238
    +
    +- glyph01246
    +
    +- glyph01247
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01314
    +
    +- glyph01315
    +
    +- glyph01349
    +
    +- glyph01350
    +
    +- glyph01363
    +
    +- glyph01364
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01379
    +
    +- glyph01415
    +
    +- glyph01421
    +
    +- glyph01424
    +
    +- glyph01425
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01441
    +
    +- glyph01461
    +
    +- glyph01462
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01479
    +
    +- glyph01480
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01549
    +
    +- glyph01550
    +
    +- glyph01555
    +
    +- glyph01556
    +
    +- glyph01557
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01571
    +
    +- glyph01572
    +
    +- glyph01573
    +
    +- glyph01574
    +
    +- glyph01575
    +
    +- glyph01576
    +
    +- glyph02084
    +
    +- glyph02110
    +
    +- glyph02143
    +
    +- glyph02276
    +
    +- glyph02557
    +
    +- glyph02558
    +
    +- glyph02564
    +
    +- glyph02587
    +
    +- glyph02590
    +
    +- glyph02593
    +
    +- glyph02601
    +
    +- glyph02605
    +
    +- glyph02606
    +
    +- glyph02610
    +
    +- glyph02615
    +
    +- glyph02627
    +
    +- glyph02635
    +
    +- glyph02641
    +
    +- glyph02646
    +
    +- glyph02649
    +
    +- glyph02652
    +
    +- glyph02658
    +
    +- glyph02664
    +
    +- glyph02668
    +
    +- glyph02671
    +
    +- glyph02675
    +
    +- glyph02678
    +
    +- glyph02680
    +
    +- glyph02683
    +
    +- glyph02686
    +
    +- glyph02689
    +
    +- glyph02692
    +
    +- glyph02695
    +
    +- glyph02698
    +
    +- glyph02701
    +
    +- glyph02704
    +
    +- glyph02707
    +
    +- glyph02711
    +
    +- glyph02714
    +
    +- glyph02717
    +
    +- glyph02720
    +
    +- glyph02723
    +
    +- glyph02726
    +
    +- glyph02728
    +
    +- glyph02782
    +
    +- glyph02785
    +
    +- glyph02788
    +
    +- glyph02794
    +
    +- glyph02805
    +
    +- glyph02806
    +
    +- glyph02807
    +
    +- glyph02808
    +
    +- glyph02810
    +
    +- glyph02811
    +
    +- glyph02812
    +
    +- glyph02813
    +
    +- glyph02814
    +
    +- glyph02815
    +
    +- glyph02816
    +
    +- glyph02817
    +
    +- glyph02818
    +
    +- glyph02820
    +
    +- glyph02821
    +
    +- glyph02822
    +
    +- glyph02823
    +
    +- glyph02824
    +
    +- glyph02825
    +
    +- glyph02826
    +
    +- glyph02827
    +
    +- glyph02828
    +
    +- glyph02829
    +
    +- glyph02830
    +
    +- glyph02831
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02834
    +
    +- glyph02835
    +
    +- glyph02836
    +
    +- glyph02837
    +
    +- glyph02838
    +
    +- glyph02839
    +
    +- glyph02840
    +
    +- glyph02841
    +
    +- glyph02842
    +
    +- glyph02843
    +
    +- glyph02844
    +
    +- glyph02845
    +
    +- glyph02846
    +
    +- glyph02847
    +
    +- glyph02848
    +
    +- glyph02849
    +
    +- glyph02850
    +
    +- glyph02851
    +
    +- glyph02852
    +
    +- glyph02853
    +
    +- glyph02854
    +
    +- glyph02855
    +
    +- glyph02856
    +
    +- glyph02857
    +
    +- glyph02858
    +
    +- glyph02859
    +
    +- glyph02860
    +
    +- glyph02861
    +
    +- glyph02862
    +
    +- glyph02863
    +
    +- glyph02864
    +
    +- glyph02865
    +
    +- glyph02866
    +
    +- glyph02867
    +
    +- glyph02868
    +
    +- glyph02869
    +
    +- glyph02870
    +
    +- glyph02871
    +
    +- glyph02872
    +
    +- glyph02873
    +
    +- glyph02874
    +
    +- glyph02875
    +
    +- glyph02876
    +
    +- glyph02877
    +
    +- glyph02878
    +
    +- glyph02879
    +
    +- glyph02880
    +
    +- glyph02881
    +
    +- glyph02882
    +
    +- glyph02883
    +
    +- glyph02884
    +
    +- glyph02885
    +
    +- glyph02886
    +
    +- glyph02887
    +
    +- glyph02888
    +
    +- glyph02889
    +
    +- glyph02890
    +
    +- glyph02891
    +
    +- glyph02892
    +
    +- glyph02893
    +
    +- glyph02894
    +
    +- glyph02895
    +
    +- glyph02896
    +
    +- glyph02897
    +
    +- glyph02898
    +
    +- glyph02899
    +
    +- glyph02900
    +
    +- glyph02901
    +
    +- glyph02902
    +
    +- glyph02903
    +
    +- glyph02904
    +
    +- glyph02905
    +
    +- glyph02906
    +
    +- glyph02907
    +
    +- glyph02908
    +
    +- glyph02909
    +
    +- glyph02910
    +
    +- glyph02911
    +
    +- glyph02912
    +
    +- glyph02913
    +
    +- glyph02914
    +
    +- glyph02915
    +
    +- glyph02916
    +
    +- glyph02917
    +
    +- glyph02918
    +
    +- glyph02919
    +
    +- glyph02920
    +
    +- glyph02921
    +
    +- glyph02922
    +
    +- glyph02923
    +
    +- glyph02924
    +
    +- glyph02925
    +
    +- glyph02926
    +
    +- glyph02927
    +
    +- glyph02928
    +
    +- glyph02929
    +
    +- glyph02930
    +
    +- glyph02931
    +
    +- glyph02932
    +
    +- glyph02933
    +
    +- glyph02934
    +
    +- glyph02935
    +
    +- glyph02936
    +
    +- glyph02937
    +
    +- glyph02938
    +
    +- glyph02939
    +
    +- glyph02940
    +
    +- glyph02941
    +
    +- glyph02942
    +
    +- glyph02943
    +
    +- glyph02944
    +
    +- glyph02945
    +
    +- glyph02946
    +
    +- glyph02947
    +
    +- glyph02948
    +
    +- glyph02949
    +
    +- glyph02950
    +
    +- glyph02951
    +
    +- glyph02952
    +
    +- glyph02953
    +
    +- glyph02954
    +
    +- glyph02955
    +
    +- glyph02956
    +
    +- glyph02957
    +
    +- glyph02958
    +
    +- glyph02959
    +
    +- glyph03006
    +
    +- glyph03007
    +
    +- glyph03008
    +
    +- glyph03009
    +
    +- glyph03010
    +
    +- glyph03011
    +
    +- glyph03012
    +
    +- glyph03013
    +
    +- glyph03014
    +
    +- glyph03015
    +
    +- glyph03016
    +
    +- glyph03017
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00306
    +
    +- glyph00365
    +
    +- glyph00469
    +
    +- glyph00471
    +
    +- glyph00473
    +
    +- glyph00475
    +
    +- glyph00496
    +
    +- glyph00497
    +
    +- glyph00498
    +
    +- glyph00509
    +
    +- glyph00513
    +
    +- glyph00514
    +
    +- glyph00517
    +
    +- glyph00518
    +
    +- glyph00519
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00525
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00532
    +
    +- glyph00533
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00538
    +
    +- glyph00539
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00549
    +
    +- glyph00550
    +
    +- glyph00552
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00565
    +
    +- glyph00566
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00571
    +
    +- glyph00572
    +
    +- glyph00574
    +
    +- glyph00575
    +
    +- glyph00576
    +
    +- glyph00924
    +
    +- glyph00949
    +
    +- glyph01110
    +
    +- glyph01112
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01116
    +
    +- glyph01117
    +
    +- glyph01154
    +
    +- glyph01164
    +
    +- glyph01176
    +
    +- glyph01200
    +
    +- glyph01235
    +
    +- glyph01239
    +
    +- glyph01240
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01255
    +
    +- glyph01256
    +
    +- glyph01316
    +
    +- glyph01317
    +
    +- glyph01351
    +
    +- glyph01352
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01367
    +
    +- glyph01368
    +
    +- glyph01381
    +
    +- glyph01417
    +
    +- glyph01423
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01438
    +
    +- glyph01439
    +
    +- glyph01443
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01468
    +
    +- glyph01469
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01483
    +
    +- glyph01484
    +
    +- glyph01551
    +
    +- glyph01552
    +
    +- glyph01560
    +
    +- glyph01562
    +
    +- glyph01564
    +
    +- glyph01565
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01569
    +
    +- glyph01600
    +
    +- glyph01611
    +
    +- glyph01612
    +
    +- glyph01613
    +
    +- glyph01614
    +
    +- glyph01616
    +
    +- glyph01617
    +
    +- glyph01618
    +
    +- glyph01619
    +
    +- glyph01620
    +
    +- glyph01621
    +
    +- glyph01622
    +
    +- glyph01623
    +
    +- glyph01624
    +
    +- glyph01626
    +
    +- glyph01627
    +
    +- glyph01628
    +
    +- glyph01629
    +
    +- glyph01630
    +
    +- glyph01631
    +
    +- glyph01632
    +
    +- glyph01633
    +
    +- glyph01634
    +
    +- glyph01635
    +
    +- glyph01636
    +
    +- glyph01637
    +
    +- glyph01638
    +
    +- glyph01639
    +
    +- glyph01640
    +
    +- glyph01641
    +
    +- glyph01642
    +
    +- glyph01643
    +
    +- glyph01644
    +
    +- glyph01645
    +
    +- glyph01646
    +
    +- glyph01647
    +
    +- glyph01648
    +
    +- glyph01649
    +
    +- glyph01650
    +
    +- glyph01651
    +
    +- glyph01652
    +
    +- glyph01653
    +
    +- glyph01654
    +
    +- glyph01655
    +
    +- glyph01656
    +
    +- glyph01657
    +
    +- glyph01658
    +
    +- glyph01659
    +
    +- glyph01660
    +
    +- glyph01661
    +
    +- glyph01662
    +
    +- glyph01663
    +
    +- glyph01664
    +
    +- glyph01665
    +
    +- glyph01666
    +
    +- glyph01667
    +
    +- glyph01668
    +
    +- glyph01669
    +
    +- glyph01670
    +
    +- glyph01671
    +
    +- glyph01672
    +
    +- glyph01673
    +
    +- glyph01674
    +
    +- glyph01675
    +
    +- glyph01676
    +
    +- glyph01677
    +
    +- glyph01678
    +
    +- glyph01679
    +
    +- glyph01680
    +
    +- glyph01681
    +
    +- glyph01682
    +
    +- glyph01683
    +
    +- glyph01684
    +
    +- glyph01685
    +
    +- glyph01686
    +
    +- glyph01687
    +
    +- glyph01688
    +
    +- glyph01689
    +
    +- glyph01690
    +
    +- glyph01691
    +
    +- glyph01692
    +
    +- glyph01693
    +
    +- glyph01694
    +
    +- glyph01695
    +
    +- glyph01696
    +
    +- glyph01697
    +
    +- glyph01698
    +
    +- glyph01699
    +
    +- glyph01700
    +
    +- glyph01701
    +
    +- glyph01702
    +
    +- glyph01703
    +
    +- glyph01704
    +
    +- glyph01705
    +
    +- glyph01706
    +
    +- glyph01707
    +
    +- glyph01708
    +
    +- glyph01709
    +
    +- glyph01710
    +
    +- glyph01711
    +
    +- glyph01712
    +
    +- glyph01713
    +
    +- glyph01714
    +
    +- glyph01715
    +
    +- glyph01716
    +
    +- glyph01717
    +
    +- glyph01718
    +
    +- glyph01719
    +
    +- glyph01720
    +
    +- glyph01721
    +
    +- glyph01722
    +
    +- glyph01723
    +
    +- glyph01724
    +
    +- glyph01725
    +
    +- glyph01726
    +
    +- glyph01727
    +
    +- glyph01728
    +
    +- glyph01729
    +
    +- glyph01730
    +
    +- glyph01731
    +
    +- glyph01732
    +
    +- glyph01733
    +
    +- glyph01734
    +
    +- glyph01735
    +
    +- glyph01736
    +
    +- glyph01737
    +
    +- glyph01738
    +
    +- glyph01739
    +
    +- glyph01740
    +
    +- glyph01741
    +
    +- glyph01742
    +
    +- glyph01743
    +
    +- glyph01744
    +
    +- glyph01745
    +
    +- glyph01746
    +
    +- glyph01747
    +
    +- glyph01748
    +
    +- glyph01749
    +
    +- glyph01750
    +
    +- glyph01751
    +
    +- glyph01752
    +
    +- glyph01753
    +
    +- glyph01754
    +
    +- glyph01755
    +
    +- glyph01756
    +
    +- glyph01757
    +
    +- glyph01758
    +
    +- glyph01759
    +
    +- glyph01760
    +
    +- glyph01761
    +
    +- glyph01762
    +
    +- glyph01763
    +
    +- glyph01764
    +
    +- glyph01765
    +
    +- glyph01786
    +
    +- glyph01823
    +
    +- glyph01824
    +
    +- glyph01825
    +
    +- glyph01826
    +
    +- glyph01827
    +
    +- glyph01828
    +
    +- glyph01829
    +
    +- glyph01830
    +
    +- glyph01831
    +
    +- glyph01832
    +
    +- glyph01833
    +
    +- glyph01834
    +
    +- glyph02314
    +
    +- glyph02339
    +
    +- glyph02371
    +
    +- glyph02502
    +
    +- glyph02783
    +
    +- glyph02784
    +
    +- glyph02791
    +
    +- glyph02814
    +
    +- glyph02817
    +
    +- glyph02820
    +
    +- glyph02828
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02837
    +
    +- glyph02842
    +
    +- glyph02860
    +
    +- glyph02866
    +
    +- glyph02871
    +
    +- glyph02874
    +
    +- glyph02877
    +
    +- glyph02883
    +
    +- glyph02889
    +
    +- glyph02893
    +
    +- glyph02896
    +
    +- glyph02900
    +
    +- glyph02903
    +
    +- glyph02905
    +
    +- glyph02908
    +
    +- glyph02911
    +
    +- glyph02914
    +
    +- glyph02917
    +
    +- glyph02920
    +
    +- glyph02923
    +
    +- glyph02926
    +
    +- glyph02929
    +
    +- glyph02932
    +
    +- glyph02936
    +
    +- glyph02939
    +
    +- glyph02942
    +
    +- glyph02945
    +
    +- glyph02948
    +
    +- glyph02951
    +
    +- glyph02953
    +
    +- glyph03007
    +
    +- glyph03010
    +
    +- glyph03013
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00305
    +
    +- glyph00363
    +
    +- glyph00494
    +
    +- glyph00495
    +
    +- glyph00496
    +
    +- glyph00507
    +
    +- glyph00511
    +
    +- glyph00512
    +
    +- glyph00515
    +
    +- glyph00516
    +
    +- glyph00517
    +
    +- glyph00519
    +
    +- glyph00520
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00529
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00533
    +
    +- glyph00534
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00539
    +
    +- glyph00540
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00550
    +
    +- glyph00551
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00556
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00566
    +
    +- glyph00567
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00572
    +
    +- glyph00573
    +
    +- glyph00574
    +
    +- glyph00922
    +
    +- glyph00947
    +
    +- glyph01108
    +
    +- glyph01110
    +
    +- glyph01112
    +
    +- glyph01113
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01152
    +
    +- glyph01162
    +
    +- glyph01174
    +
    +- glyph01198
    +
    +- glyph01233
    +
    +- glyph01237
    +
    +- glyph01238
    +
    +- glyph01246
    +
    +- glyph01247
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01314
    +
    +- glyph01315
    +
    +- glyph01323
    +
    +- glyph01349
    +
    +- glyph01350
    +
    +- glyph01363
    +
    +- glyph01364
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01379
    +
    +- glyph01415
    +
    +- glyph01421
    +
    +- glyph01424
    +
    +- glyph01425
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01441
    +
    +- glyph01461
    +
    +- glyph01462
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01479
    +
    +- glyph01480
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01549
    +
    +- glyph01550
    +
    +- glyph01556
    +
    +- glyph01557
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01571
    +
    +- glyph01572
    +
    +- glyph01573
    +
    +- glyph01574
    +
    +- glyph01575
    +
    +- glyph01576
    +
    +- glyph02084
    +
    +- glyph02110
    +
    +- glyph02143
    +
    +- glyph02276
    +
    +- glyph02557
    +
    +- glyph02558
    +
    +- glyph02564
    +
    +- glyph02587
    +
    +- glyph02590
    +
    +- glyph02593
    +
    +- glyph02601
    +
    +- glyph02605
    +
    +- glyph02606
    +
    +- glyph02610
    +
    +- glyph02615
    +
    +- glyph02627
    +
    +- glyph02635
    +
    +- glyph02641
    +
    +- glyph02646
    +
    +- glyph02649
    +
    +- glyph02652
    +
    +- glyph02658
    +
    +- glyph02664
    +
    +- glyph02668
    +
    +- glyph02671
    +
    +- glyph02675
    +
    +- glyph02678
    +
    +- glyph02680
    +
    +- glyph02683
    +
    +- glyph02686
    +
    +- glyph02689
    +
    +- glyph02692
    +
    +- glyph02695
    +
    +- glyph02698
    +
    +- glyph02701
    +
    +- glyph02704
    +
    +- glyph02707
    +
    +- glyph02711
    +
    +- glyph02714
    +
    +- glyph02717
    +
    +- glyph02720
    +
    +- glyph02723
    +
    +- glyph02726
    +
    +- glyph02728
    +
    +- glyph02782
    +
    +- glyph02785
    +
    +- glyph02788
    +
    +- glyph02794
    +
    +- glyph02805
    +
    +- glyph02806
    +
    +- glyph02807
    +
    +- glyph02808
    +
    +- glyph02810
    +
    +- glyph02811
    +
    +- glyph02812
    +
    +- glyph02813
    +
    +- glyph02814
    +
    +- glyph02815
    +
    +- glyph02816
    +
    +- glyph02817
    +
    +- glyph02818
    +
    +- glyph02820
    +
    +- glyph02821
    +
    +- glyph02822
    +
    +- glyph02823
    +
    +- glyph02824
    +
    +- glyph02825
    +
    +- glyph02826
    +
    +- glyph02827
    +
    +- glyph02828
    +
    +- glyph02829
    +
    +- glyph02830
    +
    +- glyph02831
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02834
    +
    +- glyph02835
    +
    +- glyph02836
    +
    +- glyph02837
    +
    +- glyph02838
    +
    +- glyph02839
    +
    +- glyph02840
    +
    +- glyph02841
    +
    +- glyph02842
    +
    +- glyph02843
    +
    +- glyph02844
    +
    +- glyph02845
    +
    +- glyph02846
    +
    +- glyph02847
    +
    +- glyph02848
    +
    +- glyph02849
    +
    +- glyph02850
    +
    +- glyph02851
    +
    +- glyph02852
    +
    +- glyph02853
    +
    +- glyph02854
    +
    +- glyph02855
    +
    +- glyph02856
    +
    +- glyph02857
    +
    +- glyph02858
    +
    +- glyph02859
    +
    +- glyph02860
    +
    +- glyph02861
    +
    +- glyph02862
    +
    +- glyph02863
    +
    +- glyph02864
    +
    +- glyph02865
    +
    +- glyph02866
    +
    +- glyph02867
    +
    +- glyph02868
    +
    +- glyph02869
    +
    +- glyph02870
    +
    +- glyph02871
    +
    +- glyph02872
    +
    +- glyph02873
    +
    +- glyph02874
    +
    +- glyph02875
    +
    +- glyph02876
    +
    +- glyph02877
    +
    +- glyph02878
    +
    +- glyph02879
    +
    +- glyph02880
    +
    +- glyph02881
    +
    +- glyph02882
    +
    +- glyph02883
    +
    +- glyph02884
    +
    +- glyph02885
    +
    +- glyph02886
    +
    +- glyph02887
    +
    +- glyph02888
    +
    +- glyph02889
    +
    +- glyph02890
    +
    +- glyph02891
    +
    +- glyph02892
    +
    +- glyph02893
    +
    +- glyph02894
    +
    +- glyph02895
    +
    +- glyph02896
    +
    +- glyph02897
    +
    +- glyph02898
    +
    +- glyph02899
    +
    +- glyph02900
    +
    +- glyph02901
    +
    +- glyph02902
    +
    +- glyph02903
    +
    +- glyph02904
    +
    +- glyph02905
    +
    +- glyph02906
    +
    +- glyph02907
    +
    +- glyph02908
    +
    +- glyph02909
    +
    +- glyph02910
    +
    +- glyph02911
    +
    +- glyph02912
    +
    +- glyph02913
    +
    +- glyph02914
    +
    +- glyph02915
    +
    +- glyph02916
    +
    +- glyph02917
    +
    +- glyph02918
    +
    +- glyph02919
    +
    +- glyph02920
    +
    +- glyph02921
    +
    +- glyph02922
    +
    +- glyph02923
    +
    +- glyph02924
    +
    +- glyph02925
    +
    +- glyph02926
    +
    +- glyph02927
    +
    +- glyph02928
    +
    +- glyph02929
    +
    +- glyph02930
    +
    +- glyph02931
    +
    +- glyph02932
    +
    +- glyph02933
    +
    +- glyph02934
    +
    +- glyph02935
    +
    +- glyph02936
    +
    +- glyph02937
    +
    +- glyph02938
    +
    +- glyph02939
    +
    +- glyph02940
    +
    +- glyph02941
    +
    +- glyph02942
    +
    +- glyph02943
    +
    +- glyph02944
    +
    +- glyph02945
    +
    +- glyph02946
    +
    +- glyph02947
    +
    +- glyph02948
    +
    +- glyph02949
    +
    +- glyph02950
    +
    +- glyph02951
    +
    +- glyph02952
    +
    +- glyph02953
    +
    +- glyph02954
    +
    +- glyph02955
    +
    +- glyph02956
    +
    +- glyph02957
    +
    +- glyph02958
    +
    +- glyph02959
    +
    +- glyph03006
    +
    +- glyph03007
    +
    +- glyph03008
    +
    +- glyph03009
    +
    +- glyph03010
    +
    +- glyph03011
    +
    +- glyph03012
    +
    +- glyph03013
    +
    +- glyph03014
    +
    +- glyph03015
    +
    +- glyph03016
    +
    +- glyph03017
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00306
    +
    +- glyph00365
    +
    +- glyph00496
    +
    +- glyph00497
    +
    +- glyph00498
    +
    +- glyph00509
    +
    +- glyph00513
    +
    +- glyph00514
    +
    +- glyph00517
    +
    +- glyph00518
    +
    +- glyph00519
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00525
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00532
    +
    +- glyph00533
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00538
    +
    +- glyph00539
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00549
    +
    +- glyph00550
    +
    +- glyph00552
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00565
    +
    +- glyph00566
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00571
    +
    +- glyph00572
    +
    +- glyph00574
    +
    +- glyph00575
    +
    +- glyph00576
    +
    +- glyph00924
    +
    +- glyph00949
    +
    +- glyph01110
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01116
    +
    +- glyph01117
    +
    +- glyph01154
    +
    +- glyph01164
    +
    +- glyph01176
    +
    +- glyph01200
    +
    +- glyph01235
    +
    +- glyph01239
    +
    +- glyph01240
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01255
    +
    +- glyph01256
    +
    +- glyph01316
    +
    +- glyph01317
    +
    +- glyph01325
    +
    +- glyph01351
    +
    +- glyph01352
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01367
    +
    +- glyph01368
    +
    +- glyph01381
    +
    +- glyph01417
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01438
    +
    +- glyph01439
    +
    +- glyph01443
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01468
    +
    +- glyph01469
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01483
    +
    +- glyph01484
    +
    +- glyph01551
    +
    +- glyph01552
    +
    +- glyph01560
    +
    +- glyph01562
    +
    +- glyph01564
    +
    +- glyph01565
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01569
    +
    +- glyph01600
    +
    +- glyph01611
    +
    +- glyph01612
    +
    +- glyph01613
    +
    +- glyph01614
    +
    +- glyph01616
    +
    +- glyph01617
    +
    +- glyph01618
    +
    +- glyph01619
    +
    +- glyph01620
    +
    +- glyph01621
    +
    +- glyph01622
    +
    +- glyph01623
    +
    +- glyph01624
    +
    +- glyph01626
    +
    +- glyph01627
    +
    +- glyph01628
    +
    +- glyph01629
    +
    +- glyph01630
    +
    +- glyph01631
    +
    +- glyph01632
    +
    +- glyph01633
    +
    +- glyph01634
    +
    +- glyph01635
    +
    +- glyph01636
    +
    +- glyph01637
    +
    +- glyph01638
    +
    +- glyph01639
    +
    +- glyph01640
    +
    +- glyph01641
    +
    +- glyph01642
    +
    +- glyph01643
    +
    +- glyph01644
    +
    +- glyph01645
    +
    +- glyph01646
    +
    +- glyph01647
    +
    +- glyph01648
    +
    +- glyph01649
    +
    +- glyph01650
    +
    +- glyph01651
    +
    +- glyph01652
    +
    +- glyph01653
    +
    +- glyph01654
    +
    +- glyph01655
    +
    +- glyph01656
    +
    +- glyph01657
    +
    +- glyph01658
    +
    +- glyph01659
    +
    +- glyph01660
    +
    +- glyph01661
    +
    +- glyph01662
    +
    +- glyph01663
    +
    +- glyph01664
    +
    +- glyph01665
    +
    +- glyph01666
    +
    +- glyph01667
    +
    +- glyph01668
    +
    +- glyph01669
    +
    +- glyph01670
    +
    +- glyph01671
    +
    +- glyph01672
    +
    +- glyph01673
    +
    +- glyph01674
    +
    +- glyph01675
    +
    +- glyph01676
    +
    +- glyph01677
    +
    +- glyph01678
    +
    +- glyph01679
    +
    +- glyph01680
    +
    +- glyph01681
    +
    +- glyph01682
    +
    +- glyph01683
    +
    +- glyph01684
    +
    +- glyph01685
    +
    +- glyph01686
    +
    +- glyph01687
    +
    +- glyph01688
    +
    +- glyph01689
    +
    +- glyph01690
    +
    +- glyph01691
    +
    +- glyph01692
    +
    +- glyph01693
    +
    +- glyph01694
    +
    +- glyph01695
    +
    +- glyph01696
    +
    +- glyph01697
    +
    +- glyph01698
    +
    +- glyph01699
    +
    +- glyph01700
    +
    +- glyph01701
    +
    +- glyph01702
    +
    +- glyph01703
    +
    +- glyph01704
    +
    +- glyph01705
    +
    +- glyph01706
    +
    +- glyph01707
    +
    +- glyph01708
    +
    +- glyph01709
    +
    +- glyph01710
    +
    +- glyph01711
    +
    +- glyph01712
    +
    +- glyph01713
    +
    +- glyph01714
    +
    +- glyph01715
    +
    +- glyph01716
    +
    +- glyph01717
    +
    +- glyph01718
    +
    +- glyph01719
    +
    +- glyph01720
    +
    +- glyph01721
    +
    +- glyph01722
    +
    +- glyph01723
    +
    +- glyph01724
    +
    +- glyph01725
    +
    +- glyph01726
    +
    +- glyph01727
    +
    +- glyph01728
    +
    +- glyph01729
    +
    +- glyph01730
    +
    +- glyph01731
    +
    +- glyph01732
    +
    +- glyph01733
    +
    +- glyph01734
    +
    +- glyph01735
    +
    +- glyph01736
    +
    +- glyph01737
    +
    +- glyph01738
    +
    +- glyph01739
    +
    +- glyph01740
    +
    +- glyph01741
    +
    +- glyph01742
    +
    +- glyph01743
    +
    +- glyph01744
    +
    +- glyph01745
    +
    +- glyph01746
    +
    +- glyph01747
    +
    +- glyph01748
    +
    +- glyph01749
    +
    +- glyph01750
    +
    +- glyph01751
    +
    +- glyph01752
    +
    +- glyph01753
    +
    +- glyph01754
    +
    +- glyph01755
    +
    +- glyph01756
    +
    +- glyph01757
    +
    +- glyph01758
    +
    +- glyph01759
    +
    +- glyph01760
    +
    +- glyph01761
    +
    +- glyph01762
    +
    +- glyph01763
    +
    +- glyph01764
    +
    +- glyph01765
    +
    +- glyph01786
    +
    +- glyph01823
    +
    +- glyph01824
    +
    +- glyph01825
    +
    +- glyph01826
    +
    +- glyph01827
    +
    +- glyph01828
    +
    +- glyph01829
    +
    +- glyph01830
    +
    +- glyph01831
    +
    +- glyph01832
    +
    +- glyph01833
    +
    +- glyph01834
    +
    +- glyph02314
    +
    +- glyph02339
    +
    +- glyph02371
    +
    +- glyph02502
    +
    +- glyph02783
    +
    +- glyph02784
    +
    +- glyph02791
    +
    +- glyph02814
    +
    +- glyph02817
    +
    +- glyph02820
    +
    +- glyph02828
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02837
    +
    +- glyph02842
    +
    +- glyph02860
    +
    +- glyph02866
    +
    +- glyph02871
    +
    +- glyph02874
    +
    +- glyph02877
    +
    +- glyph02883
    +
    +- glyph02889
    +
    +- glyph02893
    +
    +- glyph02896
    +
    +- glyph02900
    +
    +- glyph02903
    +
    +- glyph02905
    +
    +- glyph02908
    +
    +- glyph02911
    +
    +- glyph02914
    +
    +- glyph02917
    +
    +- glyph02920
    +
    +- glyph02923
    +
    +- glyph02926
    +
    +- glyph02929
    +
    +- glyph02932
    +
    +- glyph02936
    +
    +- glyph02939
    +
    +- glyph02942
    +
    +- glyph02945
    +
    +- glyph02948
    +
    +- glyph02951
    +
    +- glyph02953
    +
    +- glyph03007
    +
    +- glyph03010
    +
    +- glyph03013
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00305
    +
    +- glyph00363
    +
    +- glyph00467
    +
    +- glyph00469
    +
    +- glyph00471
    +
    +- glyph00473
    +
    +- glyph00494
    +
    +- glyph00495
    +
    +- glyph00496
    +
    +- glyph00507
    +
    +- glyph00511
    +
    +- glyph00512
    +
    +- glyph00515
    +
    +- glyph00516
    +
    +- glyph00517
    +
    +- glyph00519
    +
    +- glyph00520
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00529
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00533
    +
    +- glyph00534
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00539
    +
    +- glyph00540
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00550
    +
    +- glyph00551
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00556
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00566
    +
    +- glyph00567
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00572
    +
    +- glyph00573
    +
    +- glyph00574
    +
    +- glyph00922
    +
    +- glyph00947
    +
    +- glyph01108
    +
    +- glyph01110
    +
    +- glyph01112
    +
    +- glyph01113
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01152
    +
    +- glyph01162
    +
    +- glyph01174
    +
    +- glyph01198
    +
    +- glyph01233
    +
    +- glyph01237
    +
    +- glyph01238
    +
    +- glyph01246
    +
    +- glyph01247
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01314
    +
    +- glyph01315
    +
    +- glyph01349
    +
    +- glyph01350
    +
    +- glyph01363
    +
    +- glyph01364
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01379
    +
    +- glyph01415
    +
    +- glyph01421
    +
    +- glyph01422
    +
    +- glyph01424
    +
    +- glyph01425
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01441
    +
    +- glyph01461
    +
    +- glyph01462
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01479
    +
    +- glyph01480
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01549
    +
    +- glyph01550
    +
    +- glyph01556
    +
    +- glyph01557
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01571
    +
    +- glyph01572
    +
    +- glyph01573
    +
    +- glyph01574
    +
    +- glyph01575
    +
    +- glyph01576
    +
    +- glyph02084
    +
    +- glyph02110
    +
    +- glyph02143
    +
    +- glyph02276
    +
    +- glyph02557
    +
    +- glyph02558
    +
    +- glyph02564
    +
    +- glyph02587
    +
    +- glyph02590
    +
    +- glyph02593
    +
    +- glyph02601
    +
    +- glyph02605
    +
    +- glyph02606
    +
    +- glyph02610
    +
    +- glyph02615
    +
    +- glyph02627
    +
    +- glyph02635
    +
    +- glyph02641
    +
    +- glyph02646
    +
    +- glyph02649
    +
    +- glyph02652
    +
    +- glyph02658
    +
    +- glyph02664
    +
    +- glyph02668
    +
    +- glyph02671
    +
    +- glyph02675
    +
    +- glyph02678
    +
    +- glyph02680
    +
    +- glyph02683
    +
    +- glyph02686
    +
    +- glyph02689
    +
    +- glyph02692
    +
    +- glyph02695
    +
    +- glyph02698
    +
    +- glyph02701
    +
    +- glyph02704
    +
    +- glyph02707
    +
    +- glyph02711
    +
    +- glyph02714
    +
    +- glyph02717
    +
    +- glyph02720
    +
    +- glyph02723
    +
    +- glyph02726
    +
    +- glyph02728
    +
    +- glyph02782
    +
    +- glyph02785
    +
    +- glyph02788
    +
    +- glyph02794
    +
    +- glyph02805
    +
    +- glyph02806
    +
    +- glyph02807
    +
    +- glyph02808
    +
    +- glyph02810
    +
    +- glyph02811
    +
    +- glyph02812
    +
    +- glyph02813
    +
    +- glyph02814
    +
    +- glyph02815
    +
    +- glyph02816
    +
    +- glyph02817
    +
    +- glyph02818
    +
    +- glyph02820
    +
    +- glyph02821
    +
    +- glyph02822
    +
    +- glyph02823
    +
    +- glyph02824
    +
    +- glyph02825
    +
    +- glyph02826
    +
    +- glyph02827
    +
    +- glyph02828
    +
    +- glyph02829
    +
    +- glyph02830
    +
    +- glyph02831
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02834
    +
    +- glyph02835
    +
    +- glyph02836
    +
    +- glyph02837
    +
    +- glyph02838
    +
    +- glyph02839
    +
    +- glyph02840
    +
    +- glyph02841
    +
    +- glyph02842
    +
    +- glyph02843
    +
    +- glyph02844
    +
    +- glyph02845
    +
    +- glyph02846
    +
    +- glyph02847
    +
    +- glyph02848
    +
    +- glyph02849
    +
    +- glyph02850
    +
    +- glyph02851
    +
    +- glyph02852
    +
    +- glyph02853
    +
    +- glyph02854
    +
    +- glyph02855
    +
    +- glyph02856
    +
    +- glyph02857
    +
    +- glyph02858
    +
    +- glyph02859
    +
    +- glyph02860
    +
    +- glyph02861
    +
    +- glyph02862
    +
    +- glyph02863
    +
    +- glyph02864
    +
    +- glyph02865
    +
    +- glyph02866
    +
    +- glyph02867
    +
    +- glyph02868
    +
    +- glyph02869
    +
    +- glyph02870
    +
    +- glyph02871
    +
    +- glyph02872
    +
    +- glyph02873
    +
    +- glyph02874
    +
    +- glyph02875
    +
    +- glyph02876
    +
    +- glyph02877
    +
    +- glyph02878
    +
    +- glyph02879
    +
    +- glyph02880
    +
    +- glyph02881
    +
    +- glyph02882
    +
    +- glyph02883
    +
    +- glyph02884
    +
    +- glyph02885
    +
    +- glyph02886
    +
    +- glyph02887
    +
    +- glyph02888
    +
    +- glyph02889
    +
    +- glyph02890
    +
    +- glyph02891
    +
    +- glyph02892
    +
    +- glyph02893
    +
    +- glyph02894
    +
    +- glyph02895
    +
    +- glyph02896
    +
    +- glyph02897
    +
    +- glyph02898
    +
    +- glyph02899
    +
    +- glyph02900
    +
    +- glyph02901
    +
    +- glyph02902
    +
    +- glyph02903
    +
    +- glyph02904
    +
    +- glyph02905
    +
    +- glyph02906
    +
    +- glyph02907
    +
    +- glyph02908
    +
    +- glyph02909
    +
    +- glyph02910
    +
    +- glyph02911
    +
    +- glyph02912
    +
    +- glyph02913
    +
    +- glyph02914
    +
    +- glyph02915
    +
    +- glyph02916
    +
    +- glyph02917
    +
    +- glyph02918
    +
    +- glyph02919
    +
    +- glyph02920
    +
    +- glyph02921
    +
    +- glyph02922
    +
    +- glyph02923
    +
    +- glyph02924
    +
    +- glyph02925
    +
    +- glyph02926
    +
    +- glyph02927
    +
    +- glyph02928
    +
    +- glyph02929
    +
    +- glyph02930
    +
    +- glyph02931
    +
    +- glyph02932
    +
    +- glyph02933
    +
    +- glyph02934
    +
    +- glyph02935
    +
    +- glyph02936
    +
    +- glyph02937
    +
    +- glyph02938
    +
    +- glyph02939
    +
    +- glyph02940
    +
    +- glyph02941
    +
    +- glyph02942
    +
    +- glyph02943
    +
    +- glyph02944
    +
    +- glyph02945
    +
    +- glyph02946
    +
    +- glyph02947
    +
    +- glyph02948
    +
    +- glyph02949
    +
    +- glyph02950
    +
    +- glyph02951
    +
    +- glyph02952
    +
    +- glyph02953
    +
    +- glyph02954
    +
    +- glyph02955
    +
    +- glyph02956
    +
    +- glyph02957
    +
    +- glyph02958
    +
    +- glyph02959
    +
    +- glyph03006
    +
    +- glyph03007
    +
    +- glyph03008
    +
    +- glyph03009
    +
    +- glyph03010
    +
    +- glyph03011
    +
    +- glyph03012
    +
    +- glyph03013
    +
    +- glyph03014
    +
    +- glyph03015
    +
    +- glyph03016
    +
    +- glyph03017
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00306
    +
    +- glyph00365
    +
    +- glyph00496
    +
    +- glyph00497
    +
    +- glyph00498
    +
    +- glyph00509
    +
    +- glyph00513
    +
    +- glyph00514
    +
    +- glyph00517
    +
    +- glyph00518
    +
    +- glyph00519
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00525
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00532
    +
    +- glyph00533
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00538
    +
    +- glyph00539
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00549
    +
    +- glyph00550
    +
    +- glyph00552
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00565
    +
    +- glyph00566
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00571
    +
    +- glyph00572
    +
    +- glyph00574
    +
    +- glyph00575
    +
    +- glyph00576
    +
    +- glyph00924
    +
    +- glyph00949
    +
    +- glyph01110
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01116
    +
    +- glyph01117
    +
    +- glyph01154
    +
    +- glyph01164
    +
    +- glyph01176
    +
    +- glyph01200
    +
    +- glyph01235
    +
    +- glyph01239
    +
    +- glyph01240
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01255
    +
    +- glyph01256
    +
    +- glyph01316
    +
    +- glyph01317
    +
    +- glyph01351
    +
    +- glyph01352
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01367
    +
    +- glyph01368
    +
    +- glyph01381
    +
    +- glyph01417
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01438
    +
    +- glyph01439
    +
    +- glyph01443
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01468
    +
    +- glyph01469
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01483
    +
    +- glyph01484
    +
    +- glyph01551
    +
    +- glyph01552
    +
    +- glyph01560
    +
    +- glyph01562
    +
    +- glyph01564
    +
    +- glyph01565
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01569
    +
    +- glyph01600
    +
    +- glyph01611
    +
    +- glyph01612
    +
    +- glyph01613
    +
    +- glyph01614
    +
    +- glyph01616
    +
    +- glyph01617
    +
    +- glyph01618
    +
    +- glyph01619
    +
    +- glyph01620
    +
    +- glyph01621
    +
    +- glyph01622
    +
    +- glyph01623
    +
    +- glyph01624
    +
    +- glyph01626
    +
    +- glyph01627
    +
    +- glyph01628
    +
    +- glyph01629
    +
    +- glyph01630
    +
    +- glyph01631
    +
    +- glyph01632
    +
    +- glyph01633
    +
    +- glyph01634
    +
    +- glyph01635
    +
    +- glyph01636
    +
    +- glyph01637
    +
    +- glyph01638
    +
    +- glyph01639
    +
    +- glyph01640
    +
    +- glyph01641
    +
    +- glyph01642
    +
    +- glyph01643
    +
    +- glyph01644
    +
    +- glyph01645
    +
    +- glyph01646
    +
    +- glyph01647
    +
    +- glyph01648
    +
    +- glyph01649
    +
    +- glyph01650
    +
    +- glyph01651
    +
    +- glyph01652
    +
    +- glyph01653
    +
    +- glyph01654
    +
    +- glyph01655
    +
    +- glyph01656
    +
    +- glyph01657
    +
    +- glyph01658
    +
    +- glyph01659
    +
    +- glyph01660
    +
    +- glyph01661
    +
    +- glyph01662
    +
    +- glyph01663
    +
    +- glyph01664
    +
    +- glyph01665
    +
    +- glyph01666
    +
    +- glyph01667
    +
    +- glyph01668
    +
    +- glyph01669
    +
    +- glyph01670
    +
    +- glyph01671
    +
    +- glyph01672
    +
    +- glyph01673
    +
    +- glyph01674
    +
    +- glyph01675
    +
    +- glyph01676
    +
    +- glyph01677
    +
    +- glyph01678
    +
    +- glyph01679
    +
    +- glyph01680
    +
    +- glyph01681
    +
    +- glyph01682
    +
    +- glyph01683
    +
    +- glyph01684
    +
    +- glyph01685
    +
    +- glyph01686
    +
    +- glyph01687
    +
    +- glyph01688
    +
    +- glyph01689
    +
    +- glyph01690
    +
    +- glyph01691
    +
    +- glyph01692
    +
    +- glyph01693
    +
    +- glyph01694
    +
    +- glyph01695
    +
    +- glyph01696
    +
    +- glyph01697
    +
    +- glyph01698
    +
    +- glyph01699
    +
    +- glyph01700
    +
    +- glyph01701
    +
    +- glyph01702
    +
    +- glyph01703
    +
    +- glyph01704
    +
    +- glyph01705
    +
    +- glyph01706
    +
    +- glyph01707
    +
    +- glyph01708
    +
    +- glyph01709
    +
    +- glyph01710
    +
    +- glyph01711
    +
    +- glyph01712
    +
    +- glyph01713
    +
    +- glyph01714
    +
    +- glyph01715
    +
    +- glyph01716
    +
    +- glyph01717
    +
    +- glyph01718
    +
    +- glyph01719
    +
    +- glyph01720
    +
    +- glyph01721
    +
    +- glyph01722
    +
    +- glyph01723
    +
    +- glyph01724
    +
    +- glyph01725
    +
    +- glyph01726
    +
    +- glyph01727
    +
    +- glyph01728
    +
    +- glyph01729
    +
    +- glyph01730
    +
    +- glyph01731
    +
    +- glyph01732
    +
    +- glyph01733
    +
    +- glyph01734
    +
    +- glyph01735
    +
    +- glyph01736
    +
    +- glyph01737
    +
    +- glyph01738
    +
    +- glyph01739
    +
    +- glyph01740
    +
    +- glyph01741
    +
    +- glyph01742
    +
    +- glyph01743
    +
    +- glyph01744
    +
    +- glyph01745
    +
    +- glyph01746
    +
    +- glyph01747
    +
    +- glyph01748
    +
    +- glyph01749
    +
    +- glyph01750
    +
    +- glyph01751
    +
    +- glyph01752
    +
    +- glyph01753
    +
    +- glyph01754
    +
    +- glyph01755
    +
    +- glyph01756
    +
    +- glyph01757
    +
    +- glyph01758
    +
    +- glyph01759
    +
    +- glyph01760
    +
    +- glyph01761
    +
    +- glyph01762
    +
    +- glyph01763
    +
    +- glyph01764
    +
    +- glyph01765
    +
    +- glyph01786
    +
    +- glyph01823
    +
    +- glyph01824
    +
    +- glyph01825
    +
    +- glyph01826
    +
    +- glyph01827
    +
    +- glyph01828
    +
    +- glyph01829
    +
    +- glyph01830
    +
    +- glyph01831
    +
    +- glyph01832
    +
    +- glyph01833
    +
    +- glyph01834
    +
    +- glyph02314
    +
    +- glyph02339
    +
    +- glyph02371
    +
    +- glyph02502
    +
    +- glyph02783
    +
    +- glyph02784
    +
    +- glyph02791
    +
    +- glyph02814
    +
    +- glyph02817
    +
    +- glyph02820
    +
    +- glyph02828
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02837
    +
    +- glyph02842
    +
    +- glyph02860
    +
    +- glyph02866
    +
    +- glyph02871
    +
    +- glyph02874
    +
    +- glyph02877
    +
    +- glyph02883
    +
    +- glyph02889
    +
    +- glyph02893
    +
    +- glyph02896
    +
    +- glyph02900
    +
    +- glyph02903
    +
    +- glyph02905
    +
    +- glyph02908
    +
    +- glyph02911
    +
    +- glyph02914
    +
    +- glyph02917
    +
    +- glyph02920
    +
    +- glyph02923
    +
    +- glyph02926
    +
    +- glyph02929
    +
    +- glyph02932
    +
    +- glyph02936
    +
    +- glyph02939
    +
    +- glyph02942
    +
    +- glyph02945
    +
    +- glyph02948
    +
    +- glyph02951
    +
    +- glyph02953
    +
    +- glyph03007
    +
    +- glyph03010
    +
    +- glyph03013
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00306
    +
    +- glyph00365
    +
    +- glyph00469
    +
    +- glyph00470
    +
    +- glyph00471
    +
    +- glyph00472
    +
    +- glyph00473
    +
    +- glyph00474
    +
    +- glyph00475
    +
    +- glyph00476
    +
    +- glyph00496
    +
    +- glyph00497
    +
    +- glyph00498
    +
    +- glyph00509
    +
    +- glyph00513
    +
    +- glyph00514
    +
    +- glyph00517
    +
    +- glyph00518
    +
    +- glyph00519
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00525
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00532
    +
    +- glyph00533
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00538
    +
    +- glyph00539
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00549
    +
    +- glyph00550
    +
    +- glyph00552
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00565
    +
    +- glyph00566
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00571
    +
    +- glyph00572
    +
    +- glyph00574
    +
    +- glyph00575
    +
    +- glyph00576
    +
    +- glyph00924
    +
    +- glyph00949
    +
    +- glyph01110
    +
    +- glyph01112
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01116
    +
    +- glyph01117
    +
    +- glyph01154
    +
    +- glyph01164
    +
    +- glyph01176
    +
    +- glyph01200
    +
    +- glyph01235
    +
    +- glyph01239
    +
    +- glyph01240
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01255
    +
    +- glyph01256
    +
    +- glyph01316
    +
    +- glyph01317
    +
    +- glyph01320
    +
    +- glyph01351
    +
    +- glyph01352
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01367
    +
    +- glyph01368
    +
    +- glyph01381
    +
    +- glyph01417
    +
    +- glyph01424
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01438
    +
    +- glyph01439
    +
    +- glyph01443
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01468
    +
    +- glyph01469
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01483
    +
    +- glyph01484
    +
    +- glyph01551
    +
    +- glyph01552
    +
    +- glyph01560
    +
    +- glyph01562
    +
    +- glyph01564
    +
    +- glyph01565
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01569
    +
    +- glyph01600
    +
    +- glyph01611
    +
    +- glyph01612
    +
    +- glyph01613
    +
    +- glyph01614
    +
    +- glyph01616
    +
    +- glyph01617
    +
    +- glyph01618
    +
    +- glyph01619
    +
    +- glyph01620
    +
    +- glyph01621
    +
    +- glyph01622
    +
    +- glyph01623
    +
    +- glyph01624
    +
    +- glyph01626
    +
    +- glyph01627
    +
    +- glyph01628
    +
    +- glyph01629
    +
    +- glyph01630
    +
    +- glyph01631
    +
    +- glyph01632
    +
    +- glyph01633
    +
    +- glyph01634
    +
    +- glyph01635
    +
    +- glyph01636
    +
    +- glyph01637
    +
    +- glyph01638
    +
    +- glyph01639
    +
    +- glyph01640
    +
    +- glyph01641
    +
    +- glyph01642
    +
    +- glyph01643
    +
    +- glyph01644
    +
    +- glyph01645
    +
    +- glyph01646
    +
    +- glyph01647
    +
    +- glyph01648
    +
    +- glyph01649
    +
    +- glyph01650
    +
    +- glyph01651
    +
    +- glyph01652
    +
    +- glyph01653
    +
    +- glyph01654
    +
    +- glyph01655
    +
    +- glyph01656
    +
    +- glyph01657
    +
    +- glyph01658
    +
    +- glyph01659
    +
    +- glyph01660
    +
    +- glyph01661
    +
    +- glyph01662
    +
    +- glyph01663
    +
    +- glyph01664
    +
    +- glyph01665
    +
    +- glyph01666
    +
    +- glyph01667
    +
    +- glyph01668
    +
    +- glyph01669
    +
    +- glyph01670
    +
    +- glyph01671
    +
    +- glyph01672
    +
    +- glyph01673
    +
    +- glyph01674
    +
    +- glyph01675
    +
    +- glyph01676
    +
    +- glyph01677
    +
    +- glyph01678
    +
    +- glyph01679
    +
    +- glyph01680
    +
    +- glyph01681
    +
    +- glyph01682
    +
    +- glyph01683
    +
    +- glyph01684
    +
    +- glyph01685
    +
    +- glyph01686
    +
    +- glyph01687
    +
    +- glyph01688
    +
    +- glyph01689
    +
    +- glyph01690
    +
    +- glyph01691
    +
    +- glyph01692
    +
    +- glyph01693
    +
    +- glyph01694
    +
    +- glyph01695
    +
    +- glyph01696
    +
    +- glyph01697
    +
    +- glyph01698
    +
    +- glyph01699
    +
    +- glyph01700
    +
    +- glyph01701
    +
    +- glyph01702
    +
    +- glyph01703
    +
    +- glyph01704
    +
    +- glyph01705
    +
    +- glyph01706
    +
    +- glyph01707
    +
    +- glyph01708
    +
    +- glyph01709
    +
    +- glyph01710
    +
    +- glyph01711
    +
    +- glyph01712
    +
    +- glyph01713
    +
    +- glyph01714
    +
    +- glyph01715
    +
    +- glyph01716
    +
    +- glyph01717
    +
    +- glyph01718
    +
    +- glyph01719
    +
    +- glyph01720
    +
    +- glyph01721
    +
    +- glyph01722
    +
    +- glyph01723
    +
    +- glyph01724
    +
    +- glyph01725
    +
    +- glyph01726
    +
    +- glyph01727
    +
    +- glyph01728
    +
    +- glyph01729
    +
    +- glyph01730
    +
    +- glyph01731
    +
    +- glyph01732
    +
    +- glyph01733
    +
    +- glyph01734
    +
    +- glyph01735
    +
    +- glyph01736
    +
    +- glyph01737
    +
    +- glyph01738
    +
    +- glyph01739
    +
    +- glyph01740
    +
    +- glyph01741
    +
    +- glyph01742
    +
    +- glyph01743
    +
    +- glyph01744
    +
    +- glyph01745
    +
    +- glyph01746
    +
    +- glyph01747
    +
    +- glyph01748
    +
    +- glyph01749
    +
    +- glyph01750
    +
    +- glyph01751
    +
    +- glyph01752
    +
    +- glyph01753
    +
    +- glyph01754
    +
    +- glyph01755
    +
    +- glyph01756
    +
    +- glyph01757
    +
    +- glyph01758
    +
    +- glyph01759
    +
    +- glyph01760
    +
    +- glyph01761
    +
    +- glyph01762
    +
    +- glyph01763
    +
    +- glyph01764
    +
    +- glyph01765
    +
    +- glyph01786
    +
    +- glyph01823
    +
    +- glyph01824
    +
    +- glyph01825
    +
    +- glyph01826
    +
    +- glyph01827
    +
    +- glyph01828
    +
    +- glyph01829
    +
    +- glyph01830
    +
    +- glyph01831
    +
    +- glyph01832
    +
    +- glyph01833
    +
    +- glyph01834
    +
    +- glyph02314
    +
    +- glyph02339
    +
    +- glyph02371
    +
    +- glyph02502
    +
    +- glyph02783
    +
    +- glyph02784
    +
    +- glyph02791
    +
    +- glyph02814
    +
    +- glyph02817
    +
    +- glyph02820
    +
    +- glyph02828
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02837
    +
    +- glyph02842
    +
    +- glyph02860
    +
    +- glyph02866
    +
    +- glyph02871
    +
    +- glyph02874
    +
    +- glyph02877
    +
    +- glyph02883
    +
    +- glyph02889
    +
    +- glyph02893
    +
    +- glyph02896
    +
    +- glyph02900
    +
    +- glyph02903
    +
    +- glyph02905
    +
    +- glyph02908
    +
    +- glyph02911
    +
    +- glyph02914
    +
    +- glyph02917
    +
    +- glyph02920
    +
    +- glyph02923
    +
    +- glyph02926
    +
    +- glyph02929
    +
    +- glyph02932
    +
    +- glyph02936
    +
    +- glyph02939
    +
    +- glyph02942
    +
    +- glyph02945
    +
    +- glyph02948
    +
    +- glyph02951
    +
    +- glyph02953
    +
    +- glyph03007
    +
    +- glyph03010
    +
    +- glyph03013
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - glyph00121
    +
    +- glyph00305
    +
    +- glyph00363
    +
    +- glyph00494
    +
    +- glyph00495
    +
    +- glyph00496
    +
    +- glyph00507
    +
    +- glyph00511
    +
    +- glyph00512
    +
    +- glyph00515
    +
    +- glyph00516
    +
    +- glyph00517
    +
    +- glyph00519
    +
    +- glyph00520
    +
    +- glyph00521
    +
    +- glyph00522
    +
    +- glyph00523
    +
    +- glyph00524
    +
    +- glyph00526
    +
    +- glyph00528
    +
    +- glyph00529
    +
    +- glyph00530
    +
    +- glyph00531
    +
    +- glyph00533
    +
    +- glyph00534
    +
    +- glyph00535
    +
    +- glyph00536
    +
    +- glyph00537
    +
    +- glyph00539
    +
    +- glyph00540
    +
    +- glyph00541
    +
    +- glyph00542
    +
    +- glyph00543
    +
    +- glyph00544
    +
    +- glyph00545
    +
    +- glyph00546
    +
    +- glyph00547
    +
    +- glyph00548
    +
    +- glyph00550
    +
    +- glyph00551
    +
    +- glyph00553
    +
    +- glyph00555
    +
    +- glyph00556
    +
    +- glyph00557
    +
    +- glyph00558
    +
    +- glyph00559
    +
    +- glyph00560
    +
    +- glyph00561
    +
    +- glyph00562
    +
    +- glyph00563
    +
    +- glyph00564
    +
    +- glyph00566
    +
    +- glyph00567
    +
    +- glyph00568
    +
    +- glyph00569
    +
    +- glyph00570
    +
    +- glyph00572
    +
    +- glyph00573
    +
    +- glyph00574
    +
    +- glyph00922
    +
    +- glyph00947
    +
    +- glyph01108
    +
    +- glyph01112
    +
    +- glyph01113
    +
    +- glyph01114
    +
    +- glyph01115
    +
    +- glyph01152
    +
    +- glyph01162
    +
    +- glyph01174
    +
    +- glyph01198
    +
    +- glyph01233
    +
    +- glyph01237
    +
    +- glyph01238
    +
    +- glyph01246
    +
    +- glyph01247
    +
    +- glyph01248
    +
    +- glyph01249
    +
    +- glyph01250
    +
    +- glyph01251
    +
    +- glyph01252
    +
    +- glyph01253
    +
    +- glyph01254
    +
    +- glyph01314
    +
    +- glyph01315
    +
    +- glyph01349
    +
    +- glyph01350
    +
    +- glyph01363
    +
    +- glyph01364
    +
    +- glyph01365
    +
    +- glyph01366
    +
    +- glyph01379
    +
    +- glyph01415
    +
    +- glyph01421
    +
    +- glyph01422
    +
    +- glyph01424
    +
    +- glyph01425
    +
    +- glyph01426
    +
    +- glyph01427
    +
    +- glyph01428
    +
    +- glyph01429
    +
    +- glyph01430
    +
    +- glyph01431
    +
    +- glyph01432
    +
    +- glyph01433
    +
    +- glyph01434
    +
    +- glyph01435
    +
    +- glyph01436
    +
    +- glyph01437
    +
    +- glyph01441
    +
    +- glyph01461
    +
    +- glyph01462
    +
    +- glyph01463
    +
    +- glyph01464
    +
    +- glyph01465
    +
    +- glyph01466
    +
    +- glyph01467
    +
    +- glyph01479
    +
    +- glyph01480
    +
    +- glyph01481
    +
    +- glyph01482
    +
    +- glyph01549
    +
    +- glyph01550
    +
    +- glyph01556
    +
    +- glyph01557
    +
    +- glyph01566
    +
    +- glyph01567
    +
    +- glyph01568
    +
    +- glyph01571
    +
    +- glyph01572
    +
    +- glyph01573
    +
    +- glyph01574
    +
    +- glyph01575
    +
    +- glyph01576
    +
    +- glyph02084
    +
    +- glyph02110
    +
    +- glyph02143
    +
    +- glyph02276
    +
    +- glyph02557
    +
    +- glyph02558
    +
    +- glyph02564
    +
    +- glyph02587
    +
    +- glyph02590
    +
    +- glyph02593
    +
    +- glyph02601
    +
    +- glyph02605
    +
    +- glyph02606
    +
    +- glyph02610
    +
    +- glyph02615
    +
    +- glyph02627
    +
    +- glyph02635
    +
    +- glyph02641
    +
    +- glyph02646
    +
    +- glyph02649
    +
    +- glyph02652
    +
    +- glyph02658
    +
    +- glyph02664
    +
    +- glyph02668
    +
    +- glyph02671
    +
    +- glyph02675
    +
    +- glyph02678
    +
    +- glyph02680
    +
    +- glyph02683
    +
    +- glyph02686
    +
    +- glyph02689
    +
    +- glyph02692
    +
    +- glyph02695
    +
    +- glyph02698
    +
    +- glyph02701
    +
    +- glyph02704
    +
    +- glyph02707
    +
    +- glyph02711
    +
    +- glyph02714
    +
    +- glyph02717
    +
    +- glyph02720
    +
    +- glyph02723
    +
    +- glyph02726
    +
    +- glyph02728
    +
    +- glyph02782
    +
    +- glyph02785
    +
    +- glyph02788
    +
    +- glyph02794
    +
    +- glyph02805
    +
    +- glyph02806
    +
    +- glyph02807
    +
    +- glyph02808
    +
    +- glyph02810
    +
    +- glyph02811
    +
    +- glyph02812
    +
    +- glyph02813
    +
    +- glyph02814
    +
    +- glyph02815
    +
    +- glyph02816
    +
    +- glyph02817
    +
    +- glyph02818
    +
    +- glyph02820
    +
    +- glyph02821
    +
    +- glyph02822
    +
    +- glyph02823
    +
    +- glyph02824
    +
    +- glyph02825
    +
    +- glyph02826
    +
    +- glyph02827
    +
    +- glyph02828
    +
    +- glyph02829
    +
    +- glyph02830
    +
    +- glyph02831
    +
    +- glyph02832
    +
    +- glyph02833
    +
    +- glyph02834
    +
    +- glyph02835
    +
    +- glyph02836
    +
    +- glyph02837
    +
    +- glyph02838
    +
    +- glyph02839
    +
    +- glyph02840
    +
    +- glyph02841
    +
    +- glyph02842
    +
    +- glyph02843
    +
    +- glyph02844
    +
    +- glyph02845
    +
    +- glyph02846
    +
    +- glyph02847
    +
    +- glyph02848
    +
    +- glyph02849
    +
    +- glyph02850
    +
    +- glyph02851
    +
    +- glyph02852
    +
    +- glyph02853
    +
    +- glyph02854
    +
    +- glyph02855
    +
    +- glyph02856
    +
    +- glyph02857
    +
    +- glyph02858
    +
    +- glyph02859
    +
    +- glyph02860
    +
    +- glyph02861
    +
    +- glyph02862
    +
    +- glyph02863
    +
    +- glyph02864
    +
    +- glyph02865
    +
    +- glyph02866
    +
    +- glyph02867
    +
    +- glyph02868
    +
    +- glyph02869
    +
    +- glyph02870
    +
    +- glyph02871
    +
    +- glyph02872
    +
    +- glyph02873
    +
    +- glyph02874
    +
    +- glyph02875
    +
    +- glyph02876
    +
    +- glyph02877
    +
    +- glyph02878
    +
    +- glyph02879
    +
    +- glyph02880
    +
    +- glyph02881
    +
    +- glyph02882
    +
    +- glyph02883
    +
    +- glyph02884
    +
    +- glyph02885
    +
    +- glyph02886
    +
    +- glyph02887
    +
    +- glyph02888
    +
    +- glyph02889
    +
    +- glyph02890
    +
    +- glyph02891
    +
    +- glyph02892
    +
    +- glyph02893
    +
    +- glyph02894
    +
    +- glyph02895
    +
    +- glyph02896
    +
    +- glyph02897
    +
    +- glyph02898
    +
    +- glyph02899
    +
    +- glyph02900
    +
    +- glyph02901
    +
    +- glyph02902
    +
    +- glyph02903
    +
    +- glyph02904
    +
    +- glyph02905
    +
    +- glyph02906
    +
    +- glyph02907
    +
    +- glyph02908
    +
    +- glyph02909
    +
    +- glyph02910
    +
    +- glyph02911
    +
    +- glyph02912
    +
    +- glyph02913
    +
    +- glyph02914
    +
    +- glyph02915
    +
    +- glyph02916
    +
    +- glyph02917
    +
    +- glyph02918
    +
    +- glyph02919
    +
    +- glyph02920
    +
    +- glyph02921
    +
    +- glyph02922
    +
    +- glyph02923
    +
    +- glyph02924
    +
    +- glyph02925
    +
    +- glyph02926
    +
    +- glyph02927
    +
    +- glyph02928
    +
    +- glyph02929
    +
    +- glyph02930
    +
    +- glyph02931
    +
    +- glyph02932
    +
    +- glyph02933
    +
    +- glyph02934
    +
    +- glyph02935
    +
    +- glyph02936
    +
    +- glyph02937
    +
    +- glyph02938
    +
    +- glyph02939
    +
    +- glyph02940
    +
    +- glyph02941
    +
    +- glyph02942
    +
    +- glyph02943
    +
    +- glyph02944
    +
    +- glyph02945
    +
    +- glyph02946
    +
    +- glyph02947
    +
    +- glyph02948
    +
    +- glyph02949
    +
    +- glyph02950
    +
    +- glyph02951
    +
    +- glyph02952
    +
    +- glyph02953
    +
    +- glyph02954
    +
    +- glyph02955
    +
    +- glyph02956
    +
    +- glyph02957
    +
    +- glyph02958
    +
    +- glyph02959
    +
    +- glyph03006
    +
    +- glyph03007
    +
    +- glyph03008
    +
    +- glyph03009
    +
    +- glyph03010
    +
    +- glyph03011
    +
    +- glyph03012
    +
    +- glyph03013
    +
    +- glyph03014
    +
    +- glyph03015
    +
    +- glyph03016
    +
    +- glyph03017
    +
    +- glyph03022
    +
    +

    [code: unreachable-glyphs]

    +
+

Check if each glyph has the recommended amount of contours.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/contour_count>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni023A	Contours detected: 4	Expected: 3
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni1E97	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni023A	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni1E97	Contours detected: 2	Expected: 3
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni042E	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni042E	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni0246	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni0246	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni023A	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni023A	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni0246	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni0247	Contours detected: 3	Expected: 4
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni1E97	Contours detected: 1	Expected: 3
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni0246	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni0247	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni1E97	Contours detected: 1	Expected: 3
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni023A	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni04FA	Contours detected: 2	Expected: 1 or 3
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni023A	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni04FA	Contours detected: 2	Expected: 1 or 3
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni1E97	Contours detected: 1	Expected: 3
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni1E97	Contours detected: 1	Expected: 3
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: onehalf	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni0246	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni0247	Contours detected: 3	Expected: 4
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni1E97	Contours detected: 1	Expected: 3
    +
    +- Glyph name: onethird	Contours detected: 2	Expected: 3
    +
    +- Glyph name: twothirds	Contours detected: 2	Expected: 1 or 3
    +
    +- Glyph name: uni2155	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni2156	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: uni2159	Contours detected: 3	Expected: 4
    +
    +- Glyph name: oneeighth	Contours detected: 4	Expected: 5
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: oneeighth	Contours detected: 4	Expected: 5
    +
    +- Glyph name: onehalf	Contours detected: 2	Expected: 3
    +
    +- Glyph name: onethird	Contours detected: 2	Expected: 3
    +
    +- Glyph name: twothirds	Contours detected: 2	Expected: 1 or 3
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni0246	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni0247	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni1E97	Contours detected: 1	Expected: 3
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni0246	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni0449	Contours detected: 2	Expected: 1
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni0246	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni0449	Contours detected: 2	Expected: 1
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni042E	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni042E	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni0246	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni0449	Contours detected: 2	Expected: 1
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni04FA	Contours detected: 2	Expected: 1 or 3
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni0246	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni0449	Contours detected: 2	Expected: 1
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni04FA	Contours detected: 2	Expected: 1 or 3
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni0246	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni0247	Contours detected: 3	Expected: 4
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni1E97	Contours detected: 1	Expected: 3
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni0246	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni0247	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni1E97	Contours detected: 1	Expected: 3
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni0246	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni0246	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +

    [code: contour-count]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni01F5	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni023A	Contours detected: 4	Expected: 3
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni1E97	Contours detected: 1	Expected: 3
    +
    +- Glyph name: uni2158	Contours detected: 6	Expected: 3 or 4
    +
    +- Glyph name: iotadieresis	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni01E5	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni023A	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni046E	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni046F	Contours detected: 1	Expected: 2
    +
    +- Glyph name: uni1E97	Contours detected: 1	Expected: 3
    +
    +

    [code: contour-count]

    +
+

Does the font contain a soft hyphen?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/soft_hyphen>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+

Ensure component transforms do not perform scaling or rotation.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/transformed_components>
+ +
🔥 Lato-Bold.ttf
  • 🔥 FAIL

    The following glyphs had components with scaling or rotation +or inverted outline direction:

    +
      +
    • glyph01798 (component glyph00180)
    • +
    • glyph01798 (component dotaccent)
    • +
    • glyph01798 (component dotaccent)
    • +
    • uni034B (component glyph00180)
    • +
    • uni034B (component dotaccent)
    • +
    • uni034B (component dotaccent) +[code: transformed-components]
    • +
    +
+
🔥 Lato-Black.ttf
  • 🔥 FAIL

    The following glyphs had components with scaling or rotation +or inverted outline direction:

    +
      +
    • glyph01798 (component glyph00180)
    • +
    • glyph01798 (component dotaccent)
    • +
    • glyph01798 (component dotaccent)
    • +
    • uni034B (component glyph00180)
    • +
    • uni034B (component dotaccent)
    • +
    • uni034B (component dotaccent) +[code: transformed-components]
    • +
    +
+
🔥 Lato-Light.ttf
  • 🔥 FAIL

    The following glyphs had components with scaling or rotation +or inverted outline direction:

    +
      +
    • glyph01798 (component glyph00180)
    • +
    • glyph01798 (component dotaccent)
    • +
    • glyph01798 (component dotaccent)
    • +
    • uni034B (component glyph00180)
    • +
    • uni034B (component dotaccent)
    • +
    • uni034B (component dotaccent) +[code: transformed-components]
    • +
    +
+
🔥 Lato-Regular.ttf
  • 🔥 FAIL

    The following glyphs had components with scaling or rotation +or inverted outline direction:

    +
      +
    • glyph01798 (component glyph00180)
    • +
    • glyph01798 (component dotaccent)
    • +
    • glyph01798 (component dotaccent)
    • +
    • uni034B (component glyph00180)
    • +
    • uni034B (component dotaccent)
    • +
    • uni034B (component dotaccent) +[code: transformed-components]
    • +
    +
+
🔥 Lato-ExtraLight.ttf
  • 🔥 FAIL

    The following glyphs had components with scaling or rotation +or inverted outline direction:

    +
      +
    • glyph01798 (component glyph00180)
    • +
    • glyph01798 (component dotaccent)
    • +
    • glyph01798 (component dotaccent)
    • +
    • uni034B (component glyph00180)
    • +
    • uni034B (component dotaccent)
    • +
    • uni034B (component dotaccent) +[code: transformed-components]
    • +
    +
+
🔥 Lato-Medium.ttf
  • 🔥 FAIL

    The following glyphs had components with scaling or rotation +or inverted outline direction:

    +
      +
    • glyph01798 (component glyph00180)
    • +
    • glyph01798 (component dotaccent)
    • +
    • glyph01798 (component dotaccent)
    • +
    • uni034B (component glyph00180)
    • +
    • uni034B (component dotaccent)
    • +
    • uni034B (component dotaccent) +[code: transformed-components]
    • +
    +
+
🔥 Lato-ExtraBold.ttf
  • 🔥 FAIL

    The following glyphs had components with scaling or rotation +or inverted outline direction:

    +
      +
    • glyph01798 (component glyph00180)
    • +
    • glyph01798 (component dotaccent)
    • +
    • glyph01798 (component dotaccent)
    • +
    • uni034B (component glyph00180)
    • +
    • uni034B (component dotaccent)
    • +
    • uni034B (component dotaccent) +[code: transformed-components]
    • +
    +
+
🔥 Lato-SemiBold.ttf
  • 🔥 FAIL

    The following glyphs had components with scaling or rotation +or inverted outline direction:

    +
      +
    • glyph01798 (component glyph00180)
    • +
    • glyph01798 (component dotaccent)
    • +
    • glyph01798 (component dotaccent)
    • +
    • uni034B (component glyph00180)
    • +
    • uni034B (component dotaccent)
    • +
    • uni034B (component dotaccent) +[code: transformed-components]
    • +
    +
+

Check math signs have the same width.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/math_signs_width>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1228: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1255: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1173: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1166: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1211: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1213: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1190: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1220: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1199: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1229: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1261: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1222: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1206: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1186: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1245: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1157: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1181: +orthogonal +[code: width-outliers]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    The most common width is 1160 among a set of 14 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 1224: +orthogonal +[code: width-outliers]

    +
+

Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)

+
Check ID: <FontBakeryCheck:com.google.fonts/check/alt_caron:googlefonts>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
  • ⚠️ WARN

    tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]

    +
+

Section: fontbakery.profiles.post

+🔥⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️ +

Fonts have consistent underline thickness?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/family/underline_thickness>
+ +
🔥 Family check
  • 🔥 FAIL

    Thickness of the underline is not the same across this family. In order to fix this, please make sure that the underlineThickness value is the same in the 'post' table of all of this family font files. +Detected underlineThickness values are: +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf: 89 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf: 36 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf: 99 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf: 99 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf: 59 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf: 99 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf: 89 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf: 96 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf: 98 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf: 19 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf: 19 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf: 36 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf: 99 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf: 92 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf: 59 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf: 98 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf: 96 +/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf: 92 +[code: inconsistent-underline-thickness]

    +
+

Font has correct post table version?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/post_table_version>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]

    +
+

Section: fontbakery.profiles.name

+🔥🔥🔥🔥🔥🔥🔥⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩ +

Check name table IDs 1, 2, 16, 17 to conform to Italic style.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/name/italic_names>
+ +
🔥 Lato-ExtraLightItalic.ttf
  • 🔥 FAIL

    Name ID 2 (Subfamily Name) does not conform to specs. Only R/I/B/BI are allowed. +Got: 'ExtraLight Italic'. [code: bad-subfamilyname]

    +
+
🔥 Lato-SemiBoldItalic.ttf
  • 🔥 FAIL

    Name ID 2 (Subfamily Name) does not conform to specs. Only R/I/B/BI are allowed. +Got: 'SemiBold Italic'. [code: bad-subfamilyname]

    +
+
🔥 Lato-ExtraBoldItalic.ttf
  • 🔥 FAIL

    Name ID 2 (Subfamily Name) does not conform to specs. Only R/I/B/BI are allowed. +Got: 'ExtraBold Italic'. [code: bad-subfamilyname]

    +
+
🔥 Lato-ThinItalic.ttf
  • 🔥 FAIL

    Name ID 2 (Subfamily Name) does not conform to specs. Only R/I/B/BI are allowed. +Got: 'Thin Italic'. [code: bad-subfamilyname]

    +
+
🔥 Lato-BlackItalic.ttf
  • 🔥 FAIL

    Name ID 2 (Subfamily Name) does not conform to specs. Only R/I/B/BI are allowed. +Got: 'Black Italic'. [code: bad-subfamilyname]

    +
+
🔥 Lato-LightItalic.ttf
  • 🔥 FAIL

    Name ID 2 (Subfamily Name) does not conform to specs. Only R/I/B/BI are allowed. +Got: 'Light Italic'. [code: bad-subfamilyname]

    +
+
🔥 Lato-MediumItalic.ttf
  • 🔥 FAIL

    Name ID 2 (Subfamily Name) does not conform to specs. Only R/I/B/BI are allowed. +Got: 'Medium Italic'. [code: bad-subfamilyname]

    +
+

Section: fontbakery.profiles.glyf

+⚠️⚠️⚠️⚠️⚠️⚠️ +

Check for points out of bounds.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/points_out_of_bounds>
+ +
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    The following glyphs have coordinates which are out of bounds: +* ('uni034B', -419.6497802734375, 1752.900146484375) +* ('uni034B', -395.9251708984375, 1752.900146484375) and ('uni034B', -371.45916748046875, 1752.900146484375)

    +

    This happens a lot when points are not extremes, which is usually bad. However, fixing this alert by adding points on extremes may do more harm than good, especially with italics, calligraphic-script, handwriting, rounded and other fonts. So it is common to ignore this message. [code: points-out-of-bounds]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    The following glyphs have coordinates which are out of bounds: +* ('glyph01798', -403.142578125, 2053.50537109375) +* ('glyph01798', -382.6064453125, 2053.50537109375) +* ('glyph01798', -360.8623046875, 2053.50537109375) +* ('uni034B', -50.47149658203125, 1534.4677734375) +* ('uni034B', -50.47149658203125, 1489.919921875) +* ('uni034B', -421.1962890625, 1771.7025756835938) +* ('uni034B', -397.11572265625, 1771.7025756835938) and ('uni034B', -371.61865234375, 1771.7025756835938)

    +

    This happens a lot when points are not extremes, which is usually bad. However, fixing this alert by adding points on extremes may do more harm than good, especially with italics, calligraphic-script, handwriting, rounded and other fonts. So it is common to ignore this message. [code: points-out-of-bounds]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    The following glyphs have coordinates which are out of bounds: +* ('glyph01798', -81.09722900390625, 1797.126708984375) +* ('glyph01798', -81.09722900390625, 1760.708984375) +* ('glyph01798', -403.63189697265625, 1962.8214111328125) +* ('glyph01798', -383.94940185546875, 1962.8214111328125) +* ('glyph01798', -364.26690673828125, 1962.8214111328125) +* ('uni034B', -83.14398193359375, 1492.3457641601562) and ('uni034B', -83.14398193359375, 1453.26416015625)

    +

    This happens a lot when points are not extremes, which is usually bad. However, fixing this alert by adding points on extremes may do more harm than good, especially with italics, calligraphic-script, handwriting, rounded and other fonts. So it is common to ignore this message. [code: points-out-of-bounds]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    The following glyphs have coordinates which are out of bounds: +* ('glyph01798', -411.733642578125, 1819.8993530273438) +* ('glyph01798', -384.9931640625, 1819.8993530273438) +* ('glyph01798', -372.57794189453125, 1819.8993530273438) +* ('uni034B', -413.328857421875, 1594.7725219726562) +* ('uni034B', -386.2568359375, 1594.7725219726562) and ('uni034B', -373.68768310546875, 1594.7725219726562)

    +

    This happens a lot when points are not extremes, which is usually bad. However, fixing this alert by adding points on extremes may do more harm than good, especially with italics, calligraphic-script, handwriting, rounded and other fonts. So it is common to ignore this message. [code: points-out-of-bounds]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    The following glyphs have coordinates which are out of bounds: +* ('glyph01798', -74.45343017578125, 1809.5278930664062) +* ('glyph01798', -74.45343017578125, 1772.1881103515625) +* ('glyph01798', -403.447265625, 1981.92578125) +* ('glyph01798', -383.73779296875, 1981.92578125) and ('glyph01798', -364.0283203125, 1981.92578125)

    +

    This happens a lot when points are not extremes, which is usually bad. However, fixing this alert by adding points on extremes may do more harm than good, especially with italics, calligraphic-script, handwriting, rounded and other fonts. So it is common to ignore this message. [code: points-out-of-bounds]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    The following glyphs have coordinates which are out of bounds: +* ('glyph01798', -68.1947021484375, 1822.85986328125) +* ('glyph01798', -68.1947021484375, 1784.7354736328125) +* ('uni034B', -415.705322265625, 1731.6357421875) +* ('uni034B', -393.1092529296875, 1731.6357421875) and ('uni034B', -370.51318359375, 1731.6357421875)

    +

    This happens a lot when points are not extremes, which is usually bad. However, fixing this alert by adding points on extremes may do more harm than good, especially with italics, calligraphic-script, handwriting, rounded and other fonts. So it is common to ignore this message. [code: points-out-of-bounds]

    +
+

Section: Shaping Checks

+⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩ +

Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/soft_dotted>
+ +
⚠️ Lato-Italic.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-ExtraLightItalic.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-Bold.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-Black.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-Light.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-BoldItalic.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-Regular.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-SemiBoldItalic.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-ExtraBoldItalic.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-Thin.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-ThinItalic.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-ExtraLight.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-BlackItalic.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-Medium.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-LightItalic.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-ExtraBold.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-SemiBold.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
⚠️ Lato-MediumItalic.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: i̊ i̋ i̍ i̐ i̓ i᷆ i᷇ j̀ j́ j̃ j̄ j̈ j̑ į̀ į́ į̂ į̃ į̄ į̌ ɨ̀ ɨ́ ɨ̂ ɨ̃ ɨ̄ ɨ̈ ɨ̋ ɨ̌ ɨ̏ ɨ̧̀ ɨ̧́ ɨ̧̂ ɨ̧̌ ɨ̱̀ ɨ̱́ ɨ̱̈ і́ ḭ̀ ḭ́ ḭ̄ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ i̇ i̎ i̒ i̔ i̽ i̾ i̿ i͂ i͆ i͊ i͋ i͌ i͐ i͑ i͒ i͗ i͛ iͣ iͤ

    +

    Your font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]

    +
+
+ + \ No newline at end of file diff --git a/docs/fontbakery-reports/lato-report.json b/docs/fontbakery-reports/lato-report.json new file mode 100644 index 00000000..7e67f34c --- /dev/null +++ b/docs/fontbakery-reports/lato-report.json @@ -0,0 +1,99307 @@ +{ + "result": { + "FAIL": 160, + "INFO": 127, + "PASS": 2207, + "SKIP": 1225, + "WARN": 330 + }, + "sections": [ + { + "checks": [ + { + "description": "Ensure that all variable font files have the same set of axes and axis ranges.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: VFs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n In order to facilitate the construction of intuitive and friendly user\n interfaces, all variable font files in a given family should have the same set\n of variation axes. Also, each axis must have a consistent setting of min/max\n value ranges accross all the files.\n ", + "result": "SKIP" + }, + { + "description": "All tabular figures must have the same width across the RIBBI-family.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tabular figures need to have the same metrics in all styles in order to allow\n tables to be set with proper typographic control, but to maintain the placement\n of decimals and numeric columns between rows.\n\n Here's a good explanation of this:\n https://www.typography.com/techniques/fonts-for-financials/#tabular-figs\n ", + "result": "PASS" + }, + { + "description": "Does font file include unacceptable control character glyphs?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Unacceptable control characters were not identified.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Use of some unacceptable control characters in the U+0000 - U+001F range can\n lead to rendering issues on some platforms.\n\n Acceptable control characters are defined as .null (U+0000) and\n CR (U+000D) for this test.\n ", + "result": "PASS" + }, + { + "description": "Ensure Italic styles have Roman counterparts.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For each font family on Google Fonts, every Italic style must have\n a Roman sibling.\n\n This kind of problem was first observed at [1] where the Bold style was\n missing but BoldItalic was included.\n\n [1] https://github.com/google/fonts/pull/1482\n ", + "result": "PASS" + }, + { + "description": "Check axis ordering on the STAT table.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "From a total of 18 font files, 18 of them (100.00%) lack a STAT table.\n\n\tAnd these are the most common STAT axis orderings:\n\t [code: summary]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is (for now) a merely informative check to detect what's the axis ordering\n declared on the STAT table of fonts in the Google Fonts collection.\n\n We may later update this to enforce some unified axis ordering scheme,\n yet to be determined.\n ", + "result": "INFO" + }, + { + "description": "Check README.md has a sample image.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: readme_contents, readme_directory", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n In order to showcase what a font family looks like, the project's README.md\n file should ideally include a sample image and highlight it in the upper\n portion of the document, no more than 10 lines away from the top of the file.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-Italic.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 508.2kb |\n | Hinted Size | 706.0kb |\n | Increase | 197.7kb |\n | Change | 38.9 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Italic\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Italic\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK: METADATA.pb font.style \"italic\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to normal fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Following glyphs differ greatly from Google Fonts version:\n\t* Aacute\n\t* Acircumflex\n\t* Adieresis\n\t* Agrave\n\t* Atilde\n\t* Cacute\n\t* Eacute\n\t* Ecircumflex\n\t* Edieresis\n\t* Egrave\n\t* Iacute\n\t* Icircumflex\n\t* Idieresis\n\t* Igrave\n\t* Nacute\n\t* Ntilde\n\t* Oacute\n\t* Ocircumflex\n\t* Odieresis\n\t* Ograve\n\t* Otilde\n\t* Sacute\n\t* Scaron\n\t* Uacute\n\t* Ucircumflex\n\t* Udieresis\n\t* Ugrave\n\t* Yacute\n\t* Ydieresis\n\t* Zacute\n\t* Zcaron\n\t* eight\n\t* five\n\t* four\n\t* integral\n\t* mu\n\t* nine\n\t* notequal\n\t* one\n\t* pi\n\t* seven\n\t* six\n\t* three\n\t* two and zero", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato | Lato |\n| Subfamily Name | Italic | Italic |\n| Full Name | Lato Italic | Lato Italic |\n| Poscript Name | Lato-Italic | Lato-Italic |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-ExtraLightItalic.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 497.5kb |\n | Hinted Size | 638.3kb |\n | Increase | 140.8kb |\n | Change | 28.3 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-ExtraLightItalic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato ExtraLight Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato ExtraLight Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato ExtraLight Italic\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato ExtraLight Italic\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK: METADATA.pb font.style \"italic\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to normal fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: api_gfonts_ttFont", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato ExtraLight | Lato ExtraLight |\n| Subfamily Name | Italic | Italic |\n| Full Name | Lato ExtraLight Italic | Lato ExtraLight Italic |\n| Poscript Name | Lato-ExtraLightItalic | Lato-ExtraLightItalic |\n| Typographic Family Name | Lato | Lato |\n| Typographic Subfamily Name | ExtraLight Italic | ExtraLight Italic |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato ExtraLight)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-Bold.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 468.9kb |\n | Hinted Size | 641.2kb |\n | Increase | 172.3kb |\n | Change | 36.7 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-Bold\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato Bold\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato Bold\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Bold\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Bold\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to italic fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.style \"normal\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Following glyphs differ greatly from Google Fonts version:\n\t* Aacute\n\t* Acircumflex\n\t* Agrave\n\t* Atilde\n\t* Cacute\n\t* Eacute\n\t* Ecircumflex\n\t* Egrave\n\t* Eth\n\t* Iacute\n\t* Icircumflex\n\t* Igrave\n\t* Nacute\n\t* Ntilde\n\t* Oacute\n\t* Ocircumflex\n\t* Ograve\n\t* Otilde\n\t* Sacute\n\t* Scaron\n\t* Uacute\n\t* Ucircumflex\n\t* Ugrave\n\t* Yacute\n\t* Zacute\n\t* Zcaron\n\t* asciicircum\n\t* florin\n\t* integral\n\t* lozenge\n\t* mu\n\t* pi\n\t* quotedblbase\n\t* quotedblleft\n\t* quotedblright\n\t* quoteleft\n\t* quoteright and quotesinglbase", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato | Lato |\n| Subfamily Name | Bold | Bold |\n| Full Name | Lato Bold | Lato Bold |\n| Poscript Name | Lato-Bold | Lato-Bold |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-Black.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 471.0kb |\n | Hinted Size | 649.2kb |\n | Increase | 178.2kb |\n | Change | 37.8 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-Black\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato Black\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato Black\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Black\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Black\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to italic fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.style \"normal\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Following glyphs differ greatly from Google Fonts version:\n\t* .notdef\n\t* A\n\t* AE\n\t* Aacute\n\t* Acircumflex\n\t* Adieresis\n\t* Agrave\n\t* Aogonek\n\t* Aring\n\t* Atilde\n\t* B\n\t* C\n\t* Cacute\n\t* Ccedilla\n\t* D\n\t* E\n\t* Eacute\n\t* Ecircumflex\n\t* Edieresis\n\t* Egrave\n\t* Eogonek\n\t* Eth\n\t* Euro\n\t* F\n\t* G\n\t* H\n\t* I\n\t* Iacute\n\t* Icircumflex\n\t* Idieresis\n\t* Igrave\n\t* J\n\t* K\n\t* L\n\t* Lslash\n\t* M\n\t* N\n\t* Nacute\n\t* Ntilde\n\t* O\n\t* OE\n\t* Oacute\n\t* Ocircumflex\n\t* Odieresis\n\t* Ograve\n\t* Omega\n\t* Oslash\n\t* Otilde\n\t* P\n\t* Q\n\t* R\n\t* S\n\t* Sacute\n\t* Scaron\n\t* T\n\t* Thorn\n\t* U\n\t* Uacute\n\t* Ucircumflex\n\t* Udieresis\n\t* Ugrave\n\t* V\n\t* W\n\t* X\n\t* Y\n\t* Yacute\n\t* Ydieresis\n\t* Z\n\t* Zacute\n\t* Zcaron\n\t* Zdotaccent\n\t* a\n\t* aacute\n\t* acircumflex\n\t* acute\n\t* adieresis\n\t* ae\n\t* agrave\n\t* ampersand\n\t* aogonek\n\t* approxequal\n\t* aring\n\t* asciitilde\n\t* asterisk\n\t* at\n\t* atilde\n\t* b\n\t* backslash\n\t* bar\n\t* braceleft\n\t* braceright\n\t* bracketleft\n\t* bracketright\n\t* breve\n\t* brokenbar\n\t* bullet\n\t* c\n\t* cacute\n\t* caron\n\t* ccedilla\n\t* cent\n\t* circumflex\n\t* colon\n\t* comma\n\t* copyright\n\t* currency\n\t* d\n\t* dagger\n\t* daggerdbl\n\t* degree\n\t* dieresis\n\t* divide\n\t* dollar\n\t* dotaccent\n\t* dotlessi\n\t* e\n\t* eacute\n\t* ecircumflex\n\t* edieresis\n\t* egrave\n\t* eight\n\t* ellipsis\n\t* emdash\n\t* endash\n\t* eogonek\n\t* equal\n\t* eth\n\t* exclam\n\t* exclamdown\n\t* f\n\t* five\n\t* florin\n\t* four\n\t* fraction\n\t* g\n\t* germandbls\n\t* grave\n\t* greater\n\t* greaterequal\n\t* guillemotleft\n\t* guillemotright\n\t* guilsinglleft\n\t* guilsinglright\n\t* h\n\t* hungarumlaut\n\t* hyphen\n\t* i\n\t* iacute\n\t* icircumflex\n\t* idieresis\n\t* igrave\n\t* infinity\n\t* integral\n\t* j\n\t* k\n\t* l\n\t* less\n\t* lessequal\n\t* logicalnot\n\t* lozenge\n\t* lslash\n\t* m\n\t* macron\n\t* minus\n\t* mu\n\t* multiply\n\t* n\n\t* nacute\n\t* nine\n\t* notequal\n\t* ntilde\n\t* numbersign\n\t* o\n\t* oacute\n\t* ocircumflex\n\t* odieresis\n\t* oe\n\t* ogonek\n\t* ograve\n\t* one\n\t* onehalf\n\t* onequarter\n\t* ordfeminine\n\t* ordmasculine\n\t* oslash\n\t* otilde\n\t* p\n\t* paragraph\n\t* parenleft\n\t* parenright\n\t* partialdiff\n\t* percent\n\t* period\n\t* periodcentered\n\t* perthousand\n\t* pi\n\t* plus\n\t* plusminus\n\t* product\n\t* q\n\t* question\n\t* questiondown\n\t* quotedbl\n\t* quotedblbase\n\t* quotedblleft\n\t* quotedblright\n\t* quoteleft\n\t* quoteright\n\t* quotesinglbase\n\t* quotesingle\n\t* r\n\t* radical\n\t* registered\n\t* ring\n\t* s\n\t* sacute\n\t* scaron\n\t* section\n\t* semicolon\n\t* seven\n\t* six\n\t* slash\n\t* sterling\n\t* summation\n\t* t\n\t* thorn\n\t* three\n\t* threequarters\n\t* tilde\n\t* trademark\n\t* two\n\t* u\n\t* uacute\n\t* ucircumflex\n\t* udieresis\n\t* ugrave\n\t* underscore\n\t* v\n\t* w\n\t* x\n\t* y\n\t* yacute\n\t* ydieresis\n\t* yen\n\t* z\n\t* zacute\n\t* zcaron\n\t* zdotaccent and zero", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato Black | Lato Black |\n| Subfamily Name | Regular | Regular |\n| Full Name | Lato Black | Lato Black |\n| Poscript Name | Lato-Black | Lato-Black |\n| Typographic Family Name | Lato | Lato |\n| Typographic Subfamily Name | Black | Black |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato Black)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-Light.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 485.2kb |\n | Hinted Size | 628.8kb |\n | Increase | 143.6kb |\n | Change | 29.6 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-Light\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato Light\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato Light\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Light\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Light\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to italic fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.style \"normal\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Following glyphs differ greatly from Google Fonts version:\n\t* Aacute\n\t* Acircumflex\n\t* Agrave\n\t* Eacute\n\t* Ecircumflex\n\t* Egrave\n\t* Iacute\n\t* Icircumflex\n\t* Igrave\n\t* Nacute\n\t* Oacute\n\t* Ocircumflex\n\t* Ograve\n\t* Sacute\n\t* Scaron\n\t* Uacute\n\t* Ucircumflex\n\t* Ugrave\n\t* Yacute\n\t* Zacute\n\t* Zcaron\n\t* asciicircum\n\t* integral\n\t* lozenge\n\t* mu\n\t* pi\n\t* quotedblbase\n\t* quotedblleft and quotedblright", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato Light | Lato Light |\n| Subfamily Name | Regular | Regular |\n| Full Name | Lato Light | Lato Light |\n| Poscript Name | Lato-Light | Lato-Light |\n| Typographic Family Name | Lato | Lato |\n| Typographic Subfamily Name | Light | Light |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato Light)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-BoldItalic.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 491.7kb |\n | Hinted Size | 682.0kb |\n | Increase | 190.3kb |\n | Change | 38.7 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-BoldItalic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato Bold Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato Bold Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Bold Italic\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Bold Italic\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK: METADATA.pb font.style \"italic\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to normal fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Following glyphs differ greatly from Google Fonts version:\n\t* Aacute\n\t* Acircumflex\n\t* Adieresis\n\t* Agrave\n\t* Aring\n\t* Atilde\n\t* Cacute\n\t* Eacute\n\t* Ecircumflex\n\t* Edieresis\n\t* Egrave\n\t* Iacute\n\t* Icircumflex\n\t* Idieresis\n\t* Igrave\n\t* Nacute\n\t* Ntilde\n\t* Oacute\n\t* Ocircumflex\n\t* Odieresis\n\t* Ograve\n\t* Otilde\n\t* Sacute\n\t* Scaron\n\t* Uacute\n\t* Ucircumflex\n\t* Udieresis\n\t* Ugrave\n\t* Yacute\n\t* Ydieresis\n\t* Zacute\n\t* Zcaron\n\t* aring\n\t* eight\n\t* five\n\t* four\n\t* integral\n\t* mu\n\t* nine\n\t* notequal\n\t* one\n\t* pi\n\t* ring\n\t* seven\n\t* six\n\t* three\n\t* two and zero", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato | Lato |\n| Subfamily Name | Bold Italic | Bold Italic |\n| Full Name | Lato Bold Italic | Lato Bold Italic |\n| Poscript Name | Lato-BoldItalic | Lato-BoldItalic |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-Regular.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 476.0kb |\n | Hinted Size | 641.2kb |\n | Increase | 165.2kb |\n | Change | 34.7 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-Regular\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato Regular\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato Regular\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Regular\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Regular\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to italic fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.style \"normal\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Following glyphs differ greatly from Google Fonts version:\n\t* Aacute\n\t* Acircumflex\n\t* Agrave\n\t* Atilde\n\t* Cacute\n\t* Eacute\n\t* Ecircumflex\n\t* Egrave\n\t* Eth\n\t* Iacute\n\t* Icircumflex\n\t* Igrave\n\t* Nacute\n\t* Ntilde\n\t* Oacute\n\t* Ocircumflex\n\t* Ograve\n\t* Otilde\n\t* Sacute\n\t* Scaron\n\t* Uacute\n\t* Ucircumflex\n\t* Ugrave\n\t* Yacute\n\t* Zacute\n\t* Zcaron\n\t* asciicircum\n\t* integral\n\t* lozenge\n\t* mu\n\t* pi\n\t* quotedblbase\n\t* quotedblleft\n\t* quotedblright\n\t* quoteleft\n\t* quoteright and quotesinglbase", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato | Lato |\n| Subfamily Name | Regular | Regular |\n| Full Name | Lato Regular | Lato Regular |\n| Poscript Name | Lato-Regular | Lato-Regular |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-SemiBoldItalic.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 500.1kb |\n | Hinted Size | 681.0kb |\n | Increase | 180.9kb |\n | Change | 36.2 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-SemiBoldItalic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato SemiBold Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato SemiBold Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato SemiBold Italic\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato SemiBold Italic\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK: METADATA.pb font.style \"italic\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to normal fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: api_gfonts_ttFont", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato SemiBold | Lato SemiBold |\n| Subfamily Name | Italic | Italic |\n| Full Name | Lato SemiBold Italic | Lato SemiBold Italic |\n| Poscript Name | Lato-SemiBoldItalic | Lato-SemiBoldItalic |\n| Typographic Family Name | Lato | Lato |\n| Typographic Subfamily Name | SemiBold Italic | SemiBold Italic |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato SemiBold)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-ExtraBoldItalic.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 485.7kb |\n | Hinted Size | 656.1kb |\n | Increase | 170.5kb |\n | Change | 35.1 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-ExtraBoldItalic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato ExtraBold Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato ExtraBold Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato ExtraBold Italic\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato ExtraBold Italic\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK: METADATA.pb font.style \"italic\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to normal fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: api_gfonts_ttFont", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato ExtraBold | Lato ExtraBold |\n| Subfamily Name | Italic | Italic |\n| Full Name | Lato ExtraBold Italic | Lato ExtraBold Italic |\n| Poscript Name | Lato-ExtraBoldItalic | Lato-ExtraBoldItalic |\n| Typographic Family Name | Lato | Lato |\n| Typographic Subfamily Name | ExtraBold Italic | ExtraBold Italic |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato ExtraBold)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-Thin.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 434.1kb |\n | Hinted Size | 570.4kb |\n | Increase | 136.2kb |\n | Change | 31.4 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-Thin\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato Thin\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato Thin\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Thin\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Thin\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to italic fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.style \"normal\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Glyphs are similar in comparison to the Google Fonts version.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato Thin | Lato Thin |\n| Subfamily Name | Regular | Regular |\n| Full Name | Lato Thin | Lato Thin |\n| Poscript Name | Lato-Thin | Lato-Thin |\n| Typographic Family Name | Lato | Lato |\n| Typographic Subfamily Name | Thin | Thin |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato Thin)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-ThinItalic.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 458.0kb |\n | Hinted Size | 594.4kb |\n | Increase | 136.5kb |\n | Change | 29.8 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-ThinItalic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato Thin Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato Thin Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Thin Italic\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Thin Italic\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK: METADATA.pb font.style \"italic\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to normal fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Following glyphs differ greatly from Google Fonts version:\n\t* integral and notequal", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato Thin | Lato Thin |\n| Subfamily Name | Italic | Italic |\n| Full Name | Lato Thin Italic | Lato Thin Italic |\n| Poscript Name | Lato-ThinItalic | Lato-ThinItalic |\n| Typographic Family Name | Lato | Lato |\n| Typographic Subfamily Name | Thin Italic | Thin Italic |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato Thin)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-ExtraLight.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 478.8kb |\n | Hinted Size | 611.9kb |\n | Increase | 133.1kb |\n | Change | 27.8 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-ExtraLight\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato ExtraLight\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato ExtraLight\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato ExtraLight\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato ExtraLight\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to italic fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.style \"normal\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: api_gfonts_ttFont", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato ExtraLight | Lato ExtraLight |\n| Subfamily Name | Regular | Regular |\n| Full Name | Lato ExtraLight | Lato ExtraLight |\n| Poscript Name | Lato-ExtraLight | Lato-ExtraLight |\n| Typographic Family Name | Lato | Lato |\n| Typographic Subfamily Name | ExtraLight | ExtraLight |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato ExtraLight)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-BlackItalic.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 489.8kb |\n | Hinted Size | 681.9kb |\n | Increase | 192.1kb |\n | Change | 39.2 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-BlackItalic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato Black Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato Black Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Black Italic\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Black Italic\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK: METADATA.pb font.style \"italic\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to normal fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Following glyphs differ greatly from Google Fonts version:\n\t* .notdef\n\t* A\n\t* AE\n\t* Aacute\n\t* Acircumflex\n\t* Adieresis\n\t* Agrave\n\t* Aogonek\n\t* Aring\n\t* Atilde\n\t* B\n\t* C\n\t* Cacute\n\t* Ccedilla\n\t* D\n\t* E\n\t* Eacute\n\t* Ecircumflex\n\t* Edieresis\n\t* Egrave\n\t* Eogonek\n\t* Eth\n\t* Euro\n\t* F\n\t* G\n\t* H\n\t* I\n\t* Iacute\n\t* Icircumflex\n\t* Idieresis\n\t* Igrave\n\t* J\n\t* K\n\t* L\n\t* Lslash\n\t* M\n\t* N\n\t* Nacute\n\t* Ntilde\n\t* O\n\t* OE\n\t* Oacute\n\t* Ocircumflex\n\t* Odieresis\n\t* Ograve\n\t* Omega\n\t* Oslash\n\t* Otilde\n\t* P\n\t* Q\n\t* R\n\t* S\n\t* Sacute\n\t* Scaron\n\t* T\n\t* Thorn\n\t* U\n\t* Uacute\n\t* Ucircumflex\n\t* Udieresis\n\t* Ugrave\n\t* V\n\t* W\n\t* X\n\t* Y\n\t* Yacute\n\t* Ydieresis\n\t* Z\n\t* Zacute\n\t* Zcaron\n\t* Zdotaccent\n\t* a\n\t* aacute\n\t* acircumflex\n\t* acute\n\t* adieresis\n\t* ae\n\t* agrave\n\t* ampersand\n\t* aogonek\n\t* approxequal\n\t* aring\n\t* asciicircum\n\t* asciitilde\n\t* asterisk\n\t* at\n\t* atilde\n\t* b\n\t* backslash\n\t* bar\n\t* braceleft\n\t* braceright\n\t* bracketleft\n\t* bracketright\n\t* breve\n\t* brokenbar\n\t* bullet\n\t* c\n\t* cacute\n\t* caron\n\t* ccedilla\n\t* cent\n\t* circumflex\n\t* colon\n\t* comma\n\t* copyright\n\t* currency\n\t* d\n\t* dagger\n\t* daggerdbl\n\t* degree\n\t* dieresis\n\t* divide\n\t* dollar\n\t* dotaccent\n\t* dotlessi\n\t* e\n\t* eacute\n\t* ecircumflex\n\t* edieresis\n\t* egrave\n\t* eight\n\t* ellipsis\n\t* emdash\n\t* endash\n\t* eogonek\n\t* equal\n\t* eth\n\t* exclam\n\t* exclamdown\n\t* f\n\t* five\n\t* florin\n\t* four\n\t* fraction\n\t* g\n\t* germandbls\n\t* grave\n\t* greater\n\t* greaterequal\n\t* guillemotleft\n\t* guillemotright\n\t* guilsinglleft\n\t* guilsinglright\n\t* h\n\t* hungarumlaut\n\t* hyphen\n\t* i\n\t* iacute\n\t* icircumflex\n\t* idieresis\n\t* igrave\n\t* infinity\n\t* j\n\t* k\n\t* l\n\t* less\n\t* lessequal\n\t* logicalnot\n\t* lozenge\n\t* lslash\n\t* m\n\t* macron\n\t* minus\n\t* mu\n\t* multiply\n\t* n\n\t* nacute\n\t* nine\n\t* notequal\n\t* ntilde\n\t* numbersign\n\t* o\n\t* oacute\n\t* ocircumflex\n\t* odieresis\n\t* oe\n\t* ograve\n\t* one\n\t* onehalf\n\t* onequarter\n\t* ordfeminine\n\t* ordmasculine\n\t* oslash\n\t* otilde\n\t* p\n\t* paragraph\n\t* parenleft\n\t* parenright\n\t* partialdiff\n\t* percent\n\t* period\n\t* periodcentered\n\t* perthousand\n\t* pi\n\t* plus\n\t* plusminus\n\t* product\n\t* q\n\t* question\n\t* questiondown\n\t* quotedbl\n\t* quotedblbase\n\t* quotedblleft\n\t* quotedblright\n\t* quoteleft\n\t* quoteright\n\t* quotesinglbase\n\t* quotesingle\n\t* r\n\t* radical\n\t* registered\n\t* ring\n\t* s\n\t* sacute\n\t* scaron\n\t* section\n\t* semicolon\n\t* seven\n\t* six\n\t* slash\n\t* sterling\n\t* summation\n\t* t\n\t* thorn\n\t* three\n\t* threequarters\n\t* tilde\n\t* trademark\n\t* two\n\t* u\n\t* uacute\n\t* ucircumflex\n\t* udieresis\n\t* ugrave\n\t* underscore\n\t* v\n\t* w\n\t* x\n\t* y\n\t* yacute\n\t* ydieresis\n\t* yen\n\t* z\n\t* zacute\n\t* zcaron\n\t* zdotaccent and zero", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato Black | Lato Black |\n| Subfamily Name | Italic | Italic |\n| Full Name | Lato Black Italic | Lato Black Italic |\n| Poscript Name | Lato-BlackItalic | Lato-BlackItalic |\n| Typographic Family Name | Lato | Lato |\n| Typographic Subfamily Name | Black Italic | Black Italic |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato Black)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-Medium.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 468.7kb |\n | Hinted Size | 621.5kb |\n | Increase | 152.7kb |\n | Change | 32.6 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-Medium\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato Medium\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato Medium\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Medium\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Medium\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to italic fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.style \"normal\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: api_gfonts_ttFont", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato Medium | Lato Medium |\n| Subfamily Name | Regular | Regular |\n| Full Name | Lato Medium | Lato Medium |\n| Poscript Name | Lato-Medium | Lato-Medium |\n| Typographic Family Name | Lato | Lato |\n| Typographic Subfamily Name | Medium | Medium |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato Medium)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-LightItalic.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 497.9kb |\n | Hinted Size | 642.1kb |\n | Increase | 144.2kb |\n | Change | 29.0 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-LightItalic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato Light Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato Light Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Light Italic\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Light Italic\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK: METADATA.pb font.style \"italic\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to normal fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Following glyphs differ greatly from Google Fonts version:\n\t* Aacute\n\t* Acircumflex\n\t* Agrave\n\t* Cacute\n\t* Ecircumflex\n\t* Icircumflex\n\t* Ocircumflex\n\t* eight\n\t* five\n\t* four\n\t* integral\n\t* mu\n\t* nine\n\t* notequal\n\t* six\n\t* three\n\t* two and zero", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato Light | Lato Light |\n| Subfamily Name | Italic | Italic |\n| Full Name | Lato Light Italic | Lato Light Italic |\n| Poscript Name | Lato-LightItalic | Lato-LightItalic |\n| Typographic Family Name | Lato | Lato |\n| Typographic Subfamily Name | Light Italic | Light Italic |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato Light)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-ExtraBold.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 452.5kb |\n | Hinted Size | 599.5kb |\n | Increase | 147.0kb |\n | Change | 32.5 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-ExtraBold\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato ExtraBold\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato ExtraBold\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato ExtraBold\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato ExtraBold\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to italic fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.style \"normal\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: api_gfonts_ttFont", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato ExtraBold | Lato ExtraBold |\n| Subfamily Name | Regular | Regular |\n| Full Name | Lato ExtraBold | Lato ExtraBold |\n| Poscript Name | Lato-ExtraBold | Lato-ExtraBold |\n| Typographic Family Name | Lato | Lato |\n| Typographic Subfamily Name | ExtraBold | ExtraBold |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato ExtraBold)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-SemiBold.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 482.2kb |\n | Hinted Size | 652.9kb |\n | Increase | 170.7kb |\n | Change | 35.4 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-SemiBold\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato SemiBold\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato SemiBold\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato SemiBold\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato SemiBold\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to italic fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.style \"normal\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: api_gfonts_ttFont", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato SemiBold | Lato SemiBold |\n| Subfamily Name | Regular | Regular |\n| Full Name | Lato SemiBold | Lato SemiBold |\n| Poscript Name | Lato-SemiBold | Lato-SemiBold |\n| Typographic Family Name | Lato | Lato |\n| Typographic Subfamily Name | SemiBold | SemiBold |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato SemiBold)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"Lato-MediumItalic.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Please host your font project on a public Git repo (such as GitHub or GitLab) and place a link in the DESCRIPTION.en_us.html file. [code: lacks-git-url]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "FAIL" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID value 'tyPL' is not yet recognized. If you registered it recently, then it's safe to ignore this warning message. Otherwise, you should set it to your own unique 4 character code, and register it with Microsoft at https://www.microsoft.com/typography/links/vendorlist.aspx\n [code: unknown]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "WARN" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "PASS" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02B0 MODIFIER LETTER SMALL H: not included in any glyphset definition\n * U+02B1 MODIFIER LETTER SMALL H WITH HOOK: not included in any glyphset definition\n * U+02B2 MODIFIER LETTER SMALL J: not included in any glyphset definition\n * U+02B3 MODIFIER LETTER SMALL R: not included in any glyphset definition\n * U+02B4 MODIFIER LETTER SMALL TURNED R: not included in any glyphset definition\n * U+02B5 MODIFIER LETTER SMALL TURNED R WITH HOOK: not included in any glyphset definition\n * U+02B6 MODIFIER LETTER SMALL CAPITAL INVERTED R: not included in any glyphset definition\n * U+02B7 MODIFIER LETTER SMALL W: not included in any glyphset definition\n * U+02B8 MODIFIER LETTER SMALL Y: not included in any glyphset definition\n * U+02B9 MODIFIER LETTER PRIME: not included in any glyphset definition\n * U+02BA MODIFIER LETTER DOUBLE PRIME: not included in any glyphset definition\n * U+02BD MODIFIER LETTER REVERSED COMMA: not included in any glyphset definition\n * U+02BE MODIFIER LETTER RIGHT HALF RING: not included in any glyphset definition\n * U+02BF MODIFIER LETTER LEFT HALF RING: not included in any glyphset definition\n * U+02C0 MODIFIER LETTER GLOTTAL STOP: not included in any glyphset definition\n * U+02C1 MODIFIER LETTER REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02C2 MODIFIER LETTER LEFT ARROWHEAD: not included in any glyphset definition\n * U+02C3 MODIFIER LETTER RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02C4 MODIFIER LETTER UP ARROWHEAD: not included in any glyphset definition\n * U+02C5 MODIFIER LETTER DOWN ARROWHEAD: not included in any glyphset definition\n * U+02C7 CARON: try adding one of: yi, canadian-aboriginal, tifinagh\n * U+02C8 MODIFIER LETTER VERTICAL LINE: not included in any glyphset definition\n * U+02C9 MODIFIER LETTER MACRON: not included in any glyphset definition\n * U+02CA MODIFIER LETTER ACUTE ACCENT: not included in any glyphset definition\n * U+02CB MODIFIER LETTER GRAVE ACCENT: not included in any glyphset definition\n * U+02CC MODIFIER LETTER LOW VERTICAL LINE: not included in any glyphset definition\n * U+02CD MODIFIER LETTER LOW MACRON: try adding lisu\n * U+02CE MODIFIER LETTER LOW GRAVE ACCENT: not included in any glyphset definition\n * U+02CF MODIFIER LETTER LOW ACUTE ACCENT: not included in any glyphset definition\n * U+02D0 MODIFIER LETTER TRIANGULAR COLON: not included in any glyphset definition\n * U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON: not included in any glyphset definition\n * U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING: not included in any glyphset definition\n * U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING: not included in any glyphset definition\n * U+02D4 MODIFIER LETTER UP TACK: not included in any glyphset definition\n * U+02D5 MODIFIER LETTER DOWN TACK: not included in any glyphset definition\n * U+02D6 MODIFIER LETTER PLUS SIGN: not included in any glyphset definition\n * U+02D7 MODIFIER LETTER MINUS SIGN: not included in any glyphset definition\n * U+02D8 BREVE: try adding one of: yi, canadian-aboriginal\n * U+02D9 DOT ABOVE: try adding one of: yi, canadian-aboriginal\n * U+02DB OGONEK: try adding one of: yi, canadian-aboriginal\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02DE MODIFIER LETTER RHOTIC HOOK: not included in any glyphset definition\n * U+02DF MODIFIER LETTER CROSS ACCENT: not included in any glyphset definition\n * U+02E0 MODIFIER LETTER SMALL GAMMA: not included in any glyphset definition\n * U+02E1 MODIFIER LETTER SMALL L: not included in any glyphset definition\n * U+02E2 MODIFIER LETTER SMALL S: not included in any glyphset definition\n * U+02E3 MODIFIER LETTER SMALL X: not included in any glyphset definition\n * U+02E4 MODIFIER LETTER SMALL REVERSED GLOTTAL STOP: not included in any glyphset definition\n * U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR: not included in any glyphset definition\n * U+02E6 MODIFIER LETTER HIGH TONE BAR: not included in any glyphset definition\n * U+02E7 MODIFIER LETTER MID TONE BAR: not included in any glyphset definition\n * U+02E8 MODIFIER LETTER LOW TONE BAR: not included in any glyphset definition\n * U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR: not included in any glyphset definition\n * U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK: not included in any glyphset definition\n * U+02EC MODIFIER LETTER VOICING: not included in any glyphset definition\n * U+02ED MODIFIER LETTER UNASPIRATED: not included in any glyphset definition\n * U+02EE MODIFIER LETTER DOUBLE APOSTROPHE: not included in any glyphset definition\n * U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD: not included in any glyphset definition\n * U+02F0 MODIFIER LETTER LOW UP ARROWHEAD: not included in any glyphset definition\n * U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD: not included in any glyphset definition\n * U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD: not included in any glyphset definition\n * U+02F3 MODIFIER LETTER LOW RING: not included in any glyphset definition\n * U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+02F7 MODIFIER LETTER LOW TILDE: not included in any glyphset definition\n * U+02F8 MODIFIER LETTER RAISED COLON: not included in any glyphset definition\n * U+02F9 MODIFIER LETTER BEGIN HIGH TONE: not included in any glyphset definition\n * U+02FA MODIFIER LETTER END HIGH TONE: not included in any glyphset definition\n * U+02FB MODIFIER LETTER BEGIN LOW TONE: not included in any glyphset definition\n * U+02FC MODIFIER LETTER END LOW TONE: not included in any glyphset definition\n * U+02FD MODIFIER LETTER SHELF: not included in any glyphset definition\n * U+02FE MODIFIER LETTER OPEN SHELF: not included in any glyphset definition\n * U+02FF MODIFIER LETTER LOW LEFT ARROW: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: math, coptic, cherokee, tifinagh\n * U+0305 COMBINING OVERLINE: try adding one of: math, glagolitic, coptic, gothic, elbasan\n * U+0306 COMBINING BREVE: try adding one of: tifinagh, old-permic\n * U+0307 COMBINING DOT ABOVE: try adding one of: math, coptic, syriac, tifinagh, canadian-aboriginal, old-permic, malayalam, tai-le\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: osage, cherokee\n * U+030C COMBINING CARON: try adding one of: tai-le, cherokee\n * U+030D COMBINING VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030E COMBINING DOUBLE VERTICAL LINE ABOVE: not included in any glyphset definition\n * U+030F COMBINING DOUBLE GRAVE ACCENT: not included in any glyphset definition\n * U+0310 COMBINING CANDRABINDU: not included in any glyphset definition\n * U+0311 COMBINING INVERTED BREVE: try adding coptic\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+0313 COMBINING COMMA ABOVE: try adding old-permic\n * U+0314 COMBINING REVERSED COMMA ABOVE: not included in any glyphset definition\n * U+0315 COMBINING COMMA ABOVE RIGHT: not included in any glyphset definition\n * U+0316 COMBINING GRAVE ACCENT BELOW: not included in any glyphset definition\n * U+0317 COMBINING ACUTE ACCENT BELOW: not included in any glyphset definition\n * U+0318 COMBINING LEFT TACK BELOW: not included in any glyphset definition\n * U+0319 COMBINING RIGHT TACK BELOW: not included in any glyphset definition\n * U+031A COMBINING LEFT ANGLE ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+031C COMBINING LEFT HALF RING BELOW: not included in any glyphset definition\n * U+031D COMBINING UP TACK BELOW: not included in any glyphset definition\n * U+031E COMBINING DOWN TACK BELOW: not included in any glyphset definition\n * U+031F COMBINING PLUS SIGN BELOW: not included in any glyphset definition\n * U+0320 COMBINING MINUS SIGN BELOW: try adding syriac\n * U+0321 COMBINING PALATALIZED HOOK BELOW: not included in any glyphset definition\n * U+0322 COMBINING RETROFLEX HOOK BELOW: not included in any glyphset definition\n * U+0324 COMBINING DIAERESIS BELOW: try adding one of: syriac, cherokee\n * U+0325 COMBINING RING BELOW: try adding syriac\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+032A COMBINING BRIDGE BELOW: not included in any glyphset definition\n * U+032B COMBINING INVERTED DOUBLE ARCH BELOW: not included in any glyphset definition\n * U+032C COMBINING CARON BELOW: not included in any glyphset definition\n * U+032D COMBINING CIRCUMFLEX ACCENT BELOW: try adding syriac\n * U+032E COMBINING BREVE BELOW: try adding syriac\n * U+032F COMBINING INVERTED BREVE BELOW: not included in any glyphset definition\n * U+0330 COMBINING TILDE BELOW: try adding one of: math, cherokee, syriac\n * U+0331 COMBINING MACRON BELOW: try adding one of: syriac, gothic, tifinagh, caucasian-albanian, cherokee\n * U+0332 COMBINING LOW LINE: not included in any glyphset definition\n * U+0333 COMBINING DOUBLE LOW LINE: not included in any glyphset definition\n * U+0334 COMBINING TILDE OVERLAY: not included in any glyphset definition\n * U+0335 COMBINING SHORT STROKE OVERLAY: not included in any glyphset definition\n * U+0336 COMBINING LONG STROKE OVERLAY: not included in any glyphset definition\n * U+0337 COMBINING SHORT SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0338 COMBINING LONG SOLIDUS OVERLAY: not included in any glyphset definition\n * U+0339 COMBINING RIGHT HALF RING BELOW: not included in any glyphset definition\n * U+033A COMBINING INVERTED BRIDGE BELOW: not included in any glyphset definition\n * U+033B COMBINING SQUARE BELOW: not included in any glyphset definition\n * U+033C COMBINING SEAGULL BELOW: not included in any glyphset definition\n * U+033D COMBINING X ABOVE: not included in any glyphset definition\n * U+033E COMBINING VERTICAL TILDE: not included in any glyphset definition\n * U+033F COMBINING DOUBLE OVERLINE: try adding coptic\n * U+0340 COMBINING GRAVE TONE MARK: not included in any glyphset definition\n * U+0341 COMBINING ACUTE TONE MARK: not included in any glyphset definition\n * U+0342 COMBINING GREEK PERISPOMENI: not included in any glyphset definition\n * U+0343 COMBINING GREEK KORONIS: not included in any glyphset definition\n * U+0344 COMBINING GREEK DIALYTIKA TONOS: not included in any glyphset definition\n * U+0345 COMBINING GREEK YPOGEGRAMMENI: not included in any glyphset definition\n * U+0346 COMBINING BRIDGE ABOVE: not included in any glyphset definition\n * U+0347 COMBINING EQUALS SIGN BELOW: not included in any glyphset definition\n * U+0348 COMBINING DOUBLE VERTICAL LINE BELOW: not included in any glyphset definition\n * U+0349 COMBINING LEFT ANGLE BELOW: not included in any glyphset definition\n * U+034A COMBINING NOT TILDE ABOVE: not included in any glyphset definition\n * U+034B COMBINING HOMOTHETIC ABOVE: not included in any glyphset definition\n * U+034C COMBINING ALMOST EQUAL TO ABOVE: not included in any glyphset definition\n * U+034D COMBINING LEFT RIGHT ARROW BELOW: not included in any glyphset definition\n * U+034E COMBINING UPWARDS ARROW BELOW: not included in any glyphset definition\n * U+034F COMBINING GRAPHEME JOINER: not included in any glyphset definition\n * U+0350 COMBINING RIGHT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+0351 COMBINING LEFT HALF RING ABOVE: not included in any glyphset definition\n * U+0352 COMBINING FERMATA: not included in any glyphset definition\n * U+0353 COMBINING X BELOW: not included in any glyphset definition\n * U+0354 COMBINING LEFT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0355 COMBINING RIGHT ARROWHEAD BELOW: not included in any glyphset definition\n * U+0356 COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW: not included in any glyphset definition\n * U+0357 COMBINING RIGHT HALF RING ABOVE: not included in any glyphset definition\n * U+0358 COMBINING DOT ABOVE RIGHT: try adding osage\n * U+0359 COMBINING ASTERISK BELOW: not included in any glyphset definition\n * U+035A COMBINING DOUBLE RING BELOW: not included in any glyphset definition\n * U+035B COMBINING ZIGZAG ABOVE: not included in any glyphset definition\n * U+035C COMBINING DOUBLE BREVE BELOW: not included in any glyphset definition\n * U+035D COMBINING DOUBLE BREVE: not included in any glyphset definition\n * U+035E COMBINING DOUBLE MACRON: try adding coptic\n * U+035F COMBINING DOUBLE MACRON BELOW: not included in any glyphset definition\n * U+0360 COMBINING DOUBLE TILDE: not included in any glyphset definition\n * U+0361 COMBINING DOUBLE INVERTED BREVE: try adding coptic\n * U+0362 COMBINING DOUBLE RIGHTWARDS ARROW BELOW: not included in any glyphset definition\n * U+0363 COMBINING LATIN SMALL LETTER A: not included in any glyphset definition\n * U+0364 COMBINING LATIN SMALL LETTER E: not included in any glyphset definition\n * U+0365 COMBINING LATIN SMALL LETTER I: not included in any glyphset definition\n * U+0366 COMBINING LATIN SMALL LETTER O: not included in any glyphset definition\n * U+0367 COMBINING LATIN SMALL LETTER U: not included in any glyphset definition\n * U+0368 COMBINING LATIN SMALL LETTER C: not included in any glyphset definition\n * U+0369 COMBINING LATIN SMALL LETTER D: not included in any glyphset definition\n * U+036A COMBINING LATIN SMALL LETTER H: not included in any glyphset definition\n * U+036B COMBINING LATIN SMALL LETTER M: not included in any glyphset definition\n * U+036C COMBINING LATIN SMALL LETTER R: not included in any glyphset definition\n * U+036D COMBINING LATIN SMALL LETTER T: not included in any glyphset definition\n * U+036E COMBINING LATIN SMALL LETTER V: not included in any glyphset definition\n * U+036F COMBINING LATIN SMALL LETTER X: not included in any glyphset definition\n * U+0E3F THAI CURRENCY SYMBOL BAHT: try adding thai\n * U+1D00 LATIN LETTER SMALL CAPITAL A: not included in any glyphset definition\n * U+1D01 LATIN LETTER SMALL CAPITAL AE: not included in any glyphset definition\n * U+1D02 LATIN SMALL LETTER TURNED AE: not included in any glyphset definition\n * U+1D03 LATIN LETTER SMALL CAPITAL BARRED B: not included in any glyphset definition\n * U+1D04 LATIN LETTER SMALL CAPITAL C: not included in any glyphset definition\n * U+1D05 LATIN LETTER SMALL CAPITAL D: not included in any glyphset definition\n * U+1D06 LATIN LETTER SMALL CAPITAL ETH: not included in any glyphset definition\n * U+1D07 LATIN LETTER SMALL CAPITAL E: not included in any glyphset definition\n * U+1D08 LATIN SMALL LETTER TURNED OPEN E: not included in any glyphset definition\n * U+1D09 LATIN SMALL LETTER TURNED I: not included in any glyphset definition\n * U+1D0A LATIN LETTER SMALL CAPITAL J: not included in any glyphset definition\n * U+1D0B LATIN LETTER SMALL CAPITAL K: not included in any glyphset definition\n * U+1D0C LATIN LETTER SMALL CAPITAL L WITH STROKE: not included in any glyphset definition\n * U+1D0D LATIN LETTER SMALL CAPITAL M: not included in any glyphset definition\n * U+1D0E LATIN LETTER SMALL CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D0F LATIN LETTER SMALL CAPITAL O: not included in any glyphset definition\n * U+1D10 LATIN LETTER SMALL CAPITAL OPEN O: not included in any glyphset definition\n * U+1D11 LATIN SMALL LETTER SIDEWAYS O: not included in any glyphset definition\n * U+1D12 LATIN SMALL LETTER SIDEWAYS OPEN O: not included in any glyphset definition\n * U+1D13 LATIN SMALL LETTER SIDEWAYS O WITH STROKE: not included in any glyphset definition\n * U+1D14 LATIN SMALL LETTER TURNED OE: not included in any glyphset definition\n * U+1D15 LATIN LETTER SMALL CAPITAL OU: not included in any glyphset definition\n * U+1D16 LATIN SMALL LETTER TOP HALF O: not included in any glyphset definition\n * U+1D17 LATIN SMALL LETTER BOTTOM HALF O: not included in any glyphset definition\n * U+1D18 LATIN LETTER SMALL CAPITAL P: not included in any glyphset definition\n * U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R: not included in any glyphset definition\n * U+1D1A LATIN LETTER SMALL CAPITAL TURNED R: not included in any glyphset definition\n * U+1D1B LATIN LETTER SMALL CAPITAL T: not included in any glyphset definition\n * U+1D1C LATIN LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1D1D LATIN SMALL LETTER SIDEWAYS U: not included in any glyphset definition\n * U+1D1E LATIN SMALL LETTER SIDEWAYS DIAERESIZED U: not included in any glyphset definition\n * U+1D1F LATIN SMALL LETTER SIDEWAYS TURNED M: not included in any glyphset definition\n * U+1D20 LATIN LETTER SMALL CAPITAL V: not included in any glyphset definition\n * U+1D21 LATIN LETTER SMALL CAPITAL W: not included in any glyphset definition\n * U+1D22 LATIN LETTER SMALL CAPITAL Z: not included in any glyphset definition\n * U+1D23 LATIN LETTER SMALL CAPITAL EZH: not included in any glyphset definition\n * U+1D24 LATIN LETTER VOICED LARYNGEAL SPIRANT: not included in any glyphset definition\n * U+1D25 LATIN LETTER AIN: not included in any glyphset definition\n * U+1D26 GREEK LETTER SMALL CAPITAL GAMMA: not included in any glyphset definition\n * U+1D27 GREEK LETTER SMALL CAPITAL LAMDA: not included in any glyphset definition\n * U+1D28 GREEK LETTER SMALL CAPITAL PI: not included in any glyphset definition\n * U+1D29 GREEK LETTER SMALL CAPITAL RHO: not included in any glyphset definition\n * U+1D2A GREEK LETTER SMALL CAPITAL PSI: not included in any glyphset definition\n * U+1D2B CYRILLIC LETTER SMALL CAPITAL EL: not included in any glyphset definition\n * U+1D2C MODIFIER LETTER CAPITAL A: not included in any glyphset definition\n * U+1D2D MODIFIER LETTER CAPITAL AE: not included in any glyphset definition\n * U+1D2E MODIFIER LETTER CAPITAL B: not included in any glyphset definition\n * U+1D2F MODIFIER LETTER CAPITAL BARRED B: not included in any glyphset definition\n * U+1D30 MODIFIER LETTER CAPITAL D: not included in any glyphset definition\n * U+1D31 MODIFIER LETTER CAPITAL E: not included in any glyphset definition\n * U+1D32 MODIFIER LETTER CAPITAL REVERSED E: not included in any glyphset definition\n * U+1D33 MODIFIER LETTER CAPITAL G: not included in any glyphset definition\n * U+1D34 MODIFIER LETTER CAPITAL H: not included in any glyphset definition\n * U+1D35 MODIFIER LETTER CAPITAL I: not included in any glyphset definition\n * U+1D36 MODIFIER LETTER CAPITAL J: not included in any glyphset definition\n * U+1D37 MODIFIER LETTER CAPITAL K: not included in any glyphset definition\n * U+1D38 MODIFIER LETTER CAPITAL L: not included in any glyphset definition\n * U+1D39 MODIFIER LETTER CAPITAL M: not included in any glyphset definition\n * U+1D3A MODIFIER LETTER CAPITAL N: not included in any glyphset definition\n * U+1D3B MODIFIER LETTER CAPITAL REVERSED N: not included in any glyphset definition\n * U+1D3C MODIFIER LETTER CAPITAL O: not included in any glyphset definition\n * U+1D3D MODIFIER LETTER CAPITAL OU: not included in any glyphset definition\n * U+1D3E MODIFIER LETTER CAPITAL P: not included in any glyphset definition\n * U+1D3F MODIFIER LETTER CAPITAL R: not included in any glyphset definition\n * U+1D40 MODIFIER LETTER CAPITAL T: not included in any glyphset definition\n * U+1D41 MODIFIER LETTER CAPITAL U: not included in any glyphset definition\n * U+1D42 MODIFIER LETTER CAPITAL W: not included in any glyphset definition\n * U+1D43 MODIFIER LETTER SMALL A: not included in any glyphset definition\n * U+1D44 MODIFIER LETTER SMALL TURNED A: not included in any glyphset definition\n * U+1D45 MODIFIER LETTER SMALL ALPHA: not included in any glyphset definition\n * U+1D46 MODIFIER LETTER SMALL TURNED AE: not included in any glyphset definition\n * U+1D47 MODIFIER LETTER SMALL B: not included in any glyphset definition\n * U+1D48 MODIFIER LETTER SMALL D: not included in any glyphset definition\n * U+1D49 MODIFIER LETTER SMALL E: not included in any glyphset definition\n * U+1D4A MODIFIER LETTER SMALL SCHWA: not included in any glyphset definition\n * U+1D4B MODIFIER LETTER SMALL OPEN E: not included in any glyphset definition\n * U+1D4C MODIFIER LETTER SMALL TURNED OPEN E: not included in any glyphset definition\n * U+1D4D MODIFIER LETTER SMALL G: not included in any glyphset definition\n * U+1D4E MODIFIER LETTER SMALL TURNED I: not included in any glyphset definition\n * U+1D4F MODIFIER LETTER SMALL K: not included in any glyphset definition\n * U+1D50 MODIFIER LETTER SMALL M: not included in any glyphset definition\n * U+1D51 MODIFIER LETTER SMALL ENG: not included in any glyphset definition\n * U+1D52 MODIFIER LETTER SMALL O: not included in any glyphset definition\n * U+1D53 MODIFIER LETTER SMALL OPEN O: not included in any glyphset definition\n * U+1D54 MODIFIER LETTER SMALL TOP HALF O: not included in any glyphset definition\n * U+1D55 MODIFIER LETTER SMALL BOTTOM HALF O: not included in any glyphset definition\n * U+1D56 MODIFIER LETTER SMALL P: not included in any glyphset definition\n * U+1D57 MODIFIER LETTER SMALL T: not included in any glyphset definition\n * U+1D58 MODIFIER LETTER SMALL U: not included in any glyphset definition\n * U+1D59 MODIFIER LETTER SMALL SIDEWAYS U: not included in any glyphset definition\n * U+1D5A MODIFIER LETTER SMALL TURNED M: not included in any glyphset definition\n * U+1D5B MODIFIER LETTER SMALL V: not included in any glyphset definition\n * U+1D5C MODIFIER LETTER SMALL AIN: not included in any glyphset definition\n * U+1D5D MODIFIER LETTER SMALL BETA: not included in any glyphset definition\n * U+1D5E MODIFIER LETTER SMALL GREEK GAMMA: not included in any glyphset definition\n * U+1D5F MODIFIER LETTER SMALL DELTA: not included in any glyphset definition\n * U+1D60 MODIFIER LETTER SMALL GREEK PHI: not included in any glyphset definition\n * U+1D61 MODIFIER LETTER SMALL CHI: not included in any glyphset definition\n * U+1D62 LATIN SUBSCRIPT SMALL LETTER I: not included in any glyphset definition\n * U+1D63 LATIN SUBSCRIPT SMALL LETTER R: not included in any glyphset definition\n * U+1D64 LATIN SUBSCRIPT SMALL LETTER U: not included in any glyphset definition\n * U+1D65 LATIN SUBSCRIPT SMALL LETTER V: not included in any glyphset definition\n * U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA: not included in any glyphset definition\n * U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA: not included in any glyphset definition\n * U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO: not included in any glyphset definition\n * U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI: not included in any glyphset definition\n * U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI: not included in any glyphset definition\n * U+1D6B LATIN SMALL LETTER UE: not included in any glyphset definition\n * U+1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D6F LATIN SMALL LETTER M WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D70 LATIN SMALL LETTER N WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D71 LATIN SMALL LETTER P WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D72 LATIN SMALL LETTER R WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D73 LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE: not included in any glyphset definition\n * U+1D74 LATIN SMALL LETTER S WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D75 LATIN SMALL LETTER T WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D76 LATIN SMALL LETTER Z WITH MIDDLE TILDE: not included in any glyphset definition\n * U+1D77 LATIN SMALL LETTER TURNED G: not included in any glyphset definition\n * U+1D78 MODIFIER LETTER CYRILLIC EN: not included in any glyphset definition\n * U+1D79 LATIN SMALL LETTER INSULAR G: not included in any glyphset definition\n * U+1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH: not included in any glyphset definition\n * U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE: not included in any glyphset definition\n * U+1D7C LATIN SMALL LETTER IOTA WITH STROKE: not included in any glyphset definition\n * U+1D7D LATIN SMALL LETTER P WITH STROKE: not included in any glyphset definition\n * U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE: not included in any glyphset definition\n * U+1D7F LATIN SMALL LETTER UPSILON WITH STROKE: not included in any glyphset definition\n * U+1D80 LATIN SMALL LETTER B WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D81 LATIN SMALL LETTER D WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D82 LATIN SMALL LETTER F WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D83 LATIN SMALL LETTER G WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D84 LATIN SMALL LETTER K WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D85 LATIN SMALL LETTER L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D86 LATIN SMALL LETTER M WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D87 LATIN SMALL LETTER N WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D88 LATIN SMALL LETTER P WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D89 LATIN SMALL LETTER R WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8A LATIN SMALL LETTER S WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8B LATIN SMALL LETTER ESH WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8C LATIN SMALL LETTER V WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8D LATIN SMALL LETTER X WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8E LATIN SMALL LETTER Z WITH PALATAL HOOK: not included in any glyphset definition\n * U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D90 LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL: not included in any glyphset definition\n * U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D94 LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D95 LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D96 LATIN SMALL LETTER I WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D98 LATIN SMALL LETTER ESH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D99 LATIN SMALL LETTER U WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9A LATIN SMALL LETTER EZH WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1D9B MODIFIER LETTER SMALL TURNED ALPHA: not included in any glyphset definition\n * U+1D9C MODIFIER LETTER SMALL C: not included in any glyphset definition\n * U+1D9D MODIFIER LETTER SMALL C WITH CURL: not included in any glyphset definition\n * U+1D9E MODIFIER LETTER SMALL ETH: not included in any glyphset definition\n * U+1D9F MODIFIER LETTER SMALL REVERSED OPEN E: not included in any glyphset definition\n * U+1DA0 MODIFIER LETTER SMALL F: not included in any glyphset definition\n * U+1DA1 MODIFIER LETTER SMALL DOTLESS J WITH STROKE: not included in any glyphset definition\n * U+1DA2 MODIFIER LETTER SMALL SCRIPT G: not included in any glyphset definition\n * U+1DA3 MODIFIER LETTER SMALL TURNED H: not included in any glyphset definition\n * U+1DA4 MODIFIER LETTER SMALL I WITH STROKE: not included in any glyphset definition\n * U+1DA5 MODIFIER LETTER SMALL IOTA: not included in any glyphset definition\n * U+1DA6 MODIFIER LETTER SMALL CAPITAL I: not included in any glyphset definition\n * U+1DA7 MODIFIER LETTER SMALL CAPITAL I WITH STROKE: not included in any glyphset definition\n * U+1DA8 MODIFIER LETTER SMALL J WITH CROSSED-TAIL: not included in any glyphset definition\n * U+1DA9 MODIFIER LETTER SMALL L WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DAA MODIFIER LETTER SMALL L WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DAB MODIFIER LETTER SMALL CAPITAL L: not included in any glyphset definition\n * U+1DAC MODIFIER LETTER SMALL M WITH HOOK: not included in any glyphset definition\n * U+1DAD MODIFIER LETTER SMALL TURNED M WITH LONG LEG: not included in any glyphset definition\n * U+1DAE MODIFIER LETTER SMALL N WITH LEFT HOOK: not included in any glyphset definition\n * U+1DAF MODIFIER LETTER SMALL N WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DB0 MODIFIER LETTER SMALL CAPITAL N: not included in any glyphset definition\n * U+1DB1 MODIFIER LETTER SMALL BARRED O: not included in any glyphset definition\n * U+1DB2 MODIFIER LETTER SMALL PHI: not included in any glyphset definition\n * U+1DB3 MODIFIER LETTER SMALL S WITH HOOK: not included in any glyphset definition\n * U+1DB4 MODIFIER LETTER SMALL ESH: not included in any glyphset definition\n * U+1DB5 MODIFIER LETTER SMALL T WITH PALATAL HOOK: not included in any glyphset definition\n * U+1DB6 MODIFIER LETTER SMALL U BAR: not included in any glyphset definition\n * U+1DB7 MODIFIER LETTER SMALL UPSILON: not included in any glyphset definition\n * U+1DB8 MODIFIER LETTER SMALL CAPITAL U: not included in any glyphset definition\n * U+1DB9 MODIFIER LETTER SMALL V WITH HOOK: not included in any glyphset definition\n * U+1DBA MODIFIER LETTER SMALL TURNED V: not included in any glyphset definition\n * U+1DBB MODIFIER LETTER SMALL Z: not included in any glyphset definition\n * U+1DBC MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK: not included in any glyphset definition\n * U+1DBD MODIFIER LETTER SMALL Z WITH CURL: not included in any glyphset definition\n * U+1DBE MODIFIER LETTER SMALL EZH: not included in any glyphset definition\n * U+1DBF MODIFIER LETTER SMALL THETA: not included in any glyphset definition\n * U+1DC0 COMBINING DOTTED GRAVE ACCENT: not included in any glyphset definition\n * U+1DC1 COMBINING DOTTED ACUTE ACCENT: not included in any glyphset definition\n * U+1DC2 COMBINING SNAKE BELOW: not included in any glyphset definition\n * U+1DC3 COMBINING SUSPENSION MARK: not included in any glyphset definition\n * U+1DC4 COMBINING MACRON-ACUTE: not included in any glyphset definition\n * U+1DC5 COMBINING GRAVE-MACRON: not included in any glyphset definition\n * U+1DC6 COMBINING MACRON-GRAVE: not included in any glyphset definition\n * U+1DC7 COMBINING ACUTE-MACRON: not included in any glyphset definition\n * U+1DC8 COMBINING GRAVE-ACUTE-GRAVE: not included in any glyphset definition\n * U+1DC9 COMBINING ACUTE-GRAVE-ACUTE: not included in any glyphset definition\n * U+1DCA COMBINING LATIN SMALL LETTER R BELOW: not included in any glyphset definition\n * U+1DFE COMBINING LEFT ARROWHEAD ABOVE: not included in any glyphset definition\n * U+1DFF COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW: not included in any glyphset definition\n * U+2000 EN QUAD: not included in any glyphset definition\n * U+2001 EM QUAD: not included in any glyphset definition\n * U+2003 EM SPACE: try adding nushu\n * U+2004 THREE-PER-EM SPACE: not included in any glyphset definition\n * U+2005 FOUR-PER-EM SPACE: not included in any glyphset definition\n * U+2006 SIX-PER-EM SPACE: not included in any glyphset definition\n * U+2007 FIGURE SPACE: not included in any glyphset definition\n * U+2008 PUNCTUATION SPACE: not included in any glyphset definition\n * U+200A HAIR SPACE: not included in any glyphset definition\n * U+200C ZERO WIDTH NON-JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, tamil, buhid, thai, gunjala-gondi, mahajani, sogdian, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, hatran, takri, gujarati, oriya, chakma, khmer, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200D ZERO WIDTH JOINER: try adding one of: kannada, limbu, javanese, rejang, cham, avestan, tagbanwa, grantha, myanmar, sinhala, tai-viet, hanunoo, khojki, buginese, tai-tham, tai-le, dogra, saurashtra, devanagari, newa, gurmukhi, syloti-nagri, mandaic, old-hungarian, buhid, tamil, thai, gunjala-gondi, mahajani, siddham, kharoshthi, sundanese, duployan, manichaean, psalter-pahlavi, tirhuta, hanifi-rohingya, brahmi, mongolian, new-tai-lue, lepcha, kaithi, telugu, batak, tifinagh, phags-pa, modi, bengali, khudawadi, warang-citi, yi, tibetan, sharada, pahawh-hmong, balinese, nko, syriac, takri, gujarati, oriya, chakma, tagalog, kayah-li, malayalam, meetei-mayek, thaana\n * U+200E LEFT-TO-RIGHT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+200F RIGHT-TO-LEFT MARK: try adding one of: phags-pa, nko, syriac, thaana\n * U+2010 HYPHEN: try adding one of: yi, syloti-nagri, cham, kaithi, coptic, sundanese, kharoshthi, kayah-li, sora-sompeng, lisu\n * U+2012 FIGURE DASH: not included in any glyphset definition\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2017 DOUBLE LOW LINE: not included in any glyphset definition\n * U+201B SINGLE HIGH-REVERSED-9 QUOTATION MARK: try adding adlam\n * U+201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+202F NARROW NO-BREAK SPACE: try adding one of: yi, mongolian\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2034 TRIPLE PRIME: try adding math\n * U+203C DOUBLE EXCLAMATION MARK: not included in any glyphset definition\n * U+203D INTERROBANG: not included in any glyphset definition\n * U+203E OVERLINE: not included in any glyphset definition\n * U+205E VERTICAL FOUR DOTS: try adding old-hungarian\n * U+205F MEDIUM MATHEMATICAL SPACE: not included in any glyphset definition\n * U+2070 SUPERSCRIPT ZERO: not included in any glyphset definition\n * U+2071 SUPERSCRIPT LATIN SMALL LETTER I: not included in any glyphset definition\n * U+2075 SUPERSCRIPT FIVE: not included in any glyphset definition\n * U+2076 SUPERSCRIPT SIX: not included in any glyphset definition\n * U+2077 SUPERSCRIPT SEVEN: not included in any glyphset definition\n * U+2078 SUPERSCRIPT EIGHT: not included in any glyphset definition\n * U+2079 SUPERSCRIPT NINE: not included in any glyphset definition\n * U+207A SUPERSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+207B SUPERSCRIPT MINUS: not included in any glyphset definition\n * U+207C SUPERSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+207D SUPERSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+207E SUPERSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+207F SUPERSCRIPT LATIN SMALL LETTER N: not included in any glyphset definition\n * U+2080 SUBSCRIPT ZERO: not included in any glyphset definition\n * U+2081 SUBSCRIPT ONE: not included in any glyphset definition\n * U+2082 SUBSCRIPT TWO: not included in any glyphset definition\n * U+2083 SUBSCRIPT THREE: not included in any glyphset definition\n * U+2084 SUBSCRIPT FOUR: not included in any glyphset definition\n * U+2085 SUBSCRIPT FIVE: not included in any glyphset definition\n * U+2086 SUBSCRIPT SIX: not included in any glyphset definition\n * U+2087 SUBSCRIPT SEVEN: not included in any glyphset definition\n * U+2088 SUBSCRIPT EIGHT: not included in any glyphset definition\n * U+2089 SUBSCRIPT NINE: not included in any glyphset definition\n * U+208A SUBSCRIPT PLUS SIGN: not included in any glyphset definition\n * U+208B SUBSCRIPT MINUS: not included in any glyphset definition\n * U+208C SUBSCRIPT EQUALS SIGN: not included in any glyphset definition\n * U+208D SUBSCRIPT LEFT PARENTHESIS: not included in any glyphset definition\n * U+208E SUBSCRIPT RIGHT PARENTHESIS: not included in any glyphset definition\n * U+208F : not included in any glyphset definition\n * U+2090 LATIN SUBSCRIPT SMALL LETTER A: not included in any glyphset definition\n * U+2091 LATIN SUBSCRIPT SMALL LETTER E: not included in any glyphset definition\n * U+2092 LATIN SUBSCRIPT SMALL LETTER O: not included in any glyphset definition\n * U+2093 LATIN SUBSCRIPT SMALL LETTER X: not included in any glyphset definition\n * U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA: not included in any glyphset definition\n * U+20DD COMBINING ENCLOSING CIRCLE: try adding symbols\n * U+2105 CARE OF: not included in any glyphset definition\n * U+2117 SOUND RECORDING COPYRIGHT: not included in any glyphset definition\n * U+2120 SERVICE MARK: not included in any glyphset definition\n * U+2126 OHM SIGN: not included in any glyphset definition\n * U+212E ESTIMATED SYMBOL: not included in any glyphset definition\n * U+2132 TURNED CAPITAL F: not included in any glyphset definition\n * U+214D AKTIESELSKAB: not included in any glyphset definition\n * U+214E TURNED SMALL F: not included in any glyphset definition\n * U+2153 VULGAR FRACTION ONE THIRD: not included in any glyphset definition\n * U+2154 VULGAR FRACTION TWO THIRDS: not included in any glyphset definition\n * U+2155 VULGAR FRACTION ONE FIFTH: not included in any glyphset definition\n * U+2156 VULGAR FRACTION TWO FIFTHS: not included in any glyphset definition\n * U+2157 VULGAR FRACTION THREE FIFTHS: not included in any glyphset definition\n * U+2158 VULGAR FRACTION FOUR FIFTHS: not included in any glyphset definition\n * U+2159 VULGAR FRACTION ONE SIXTH: not included in any glyphset definition\n * U+215A VULGAR FRACTION FIVE SIXTHS: not included in any glyphset definition\n * U+215B VULGAR FRACTION ONE EIGHTH: not included in any glyphset definition\n * U+215C VULGAR FRACTION THREE EIGHTHS: not included in any glyphset definition\n * U+215D VULGAR FRACTION FIVE EIGHTHS: not included in any glyphset definition\n * U+215E VULGAR FRACTION SEVEN EIGHTHS: not included in any glyphset definition\n * U+215F FRACTION NUMERATOR ONE: not included in any glyphset definition\n * U+2183 ROMAN NUMERAL REVERSED ONE HUNDRED: try adding symbols\n * U+2184 LATIN SMALL LETTER REVERSED C: not included in any glyphset definition\n * U+2190 LEFTWARDS ARROW: try adding one of: math, symbols\n * U+2192 RIGHTWARDS ARROW: try adding one of: math, symbols\n * U+2194 LEFT RIGHT ARROW: try adding one of: math, symbols\n * U+2195 UP DOWN ARROW: try adding one of: math, symbols\n * U+2196 NORTH WEST ARROW: try adding one of: math, symbols\n * U+2197 NORTH EAST ARROW: try adding one of: math, symbols\n * U+2198 SOUTH EAST ARROW: try adding one of: math, symbols\n * U+2199 SOUTH WEST ARROW: try adding one of: math, symbols\n * U+21A8 UP DOWN ARROW WITH BASE: try adding math\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+2219 BULLET OPERATOR: try adding one of: math, tai-tham, yi, symbols\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+221F RIGHT ANGLE: try adding math\n * U+2229 INTERSECTION: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2261 IDENTICAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+2302 HOUSE: try adding symbols\n * U+2310 REVERSED NOT SIGN: try adding math\n * U+2320 TOP HALF INTEGRAL: try adding math\n * U+2321 BOTTOM HALF INTEGRAL: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: yi, mongolian, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: yi, mongolian, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: yi, mongolian, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: yi, mongolian, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: yi, mongolian, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: yi, mongolian, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: yi, mongolian, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: yi, mongolian, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: yi, mongolian, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: yi, mongolian, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: yi, mongolian, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: yi, mongolian, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: yi, mongolian, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: yi, mongolian, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: yi, mongolian, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: yi, mongolian, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: yi, mongolian, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: yi, mongolian, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: yi, mongolian, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: yi, mongolian, symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+24EB NEGATIVE CIRCLED NUMBER ELEVEN: try adding symbols\n * U+24EC NEGATIVE CIRCLED NUMBER TWELVE: try adding symbols\n * U+24ED NEGATIVE CIRCLED NUMBER THIRTEEN: try adding symbols\n * U+24EE NEGATIVE CIRCLED NUMBER FOURTEEN: try adding symbols\n * U+24EF NEGATIVE CIRCLED NUMBER FIFTEEN: try adding symbols\n * U+24F0 NEGATIVE CIRCLED NUMBER SIXTEEN: try adding symbols\n * U+24F1 NEGATIVE CIRCLED NUMBER SEVENTEEN: try adding symbols\n * U+24F2 NEGATIVE CIRCLED NUMBER EIGHTEEN: try adding symbols\n * U+24F3 NEGATIVE CIRCLED NUMBER NINETEEN: try adding symbols\n * U+24F4 NEGATIVE CIRCLED NUMBER TWENTY: try adding symbols\n * U+24FF NEGATIVE CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25AA BLACK SMALL SQUARE: try adding symbols\n * U+25AB WHITE SMALL SQUARE: try adding symbols\n * U+25CA LOZENGE: try adding one of: math, symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CC DOTTED CIRCLE: try adding one of: mende-kikakui, javanese, soyombo, caucasian-albanian, hanunoo, tai-le, dogra, gurmukhi, miao, syloti-nagri, gunjala-gondi, mahajani, siddham, brahmi, phags-pa, elbasan, bengali, adlam, gujarati, kayah-li, malayalam, bhaiksuki, thaana, ahom, kannada, lao, tai-viet, khojki, thai, sundanese, duployan, manichaean, lepcha, kaithi, tifinagh, modi, yi, nko, takri, wancho, marchen, hebrew, sinhala, newa, buhid, coptic, osage, sogdian, kharoshthi, new-tai-lue, batak, khudawadi, chakma, mandaic, symbols, music, math, limbu, rejang, tagbanwa, cham, grantha, myanmar, old-permic, buginese, devanagari, tamil, masaram-gondi, psalter-pahlavi, tirhuta, hanifi-rohingya, mongolian, zanabazar-square, telugu, bassa-vah, tibetan, sharada, pahawh-hmong, balinese, syriac, oriya, tagalog, khmer, meetei-mayek\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E6 WHITE BULLET: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+263C WHITE SUN WITH RAYS: try adding symbols\n * U+2669 QUARTER NOTE: try adding one of: music, symbols\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+277F DINGBAT NEGATIVE CIRCLED NUMBER TEN: try adding symbols\n * U+2E17 DOUBLE OBLIQUE HYPHEN: try adding coptic\n * U+A717 MODIFIER LETTER DOT VERTICAL BAR: not included in any glyphset definition\n * U+A718 MODIFIER LETTER DOT SLASH: not included in any glyphset definition\n * U+A719 MODIFIER LETTER DOT HORIZONTAL BAR: not included in any glyphset definition\n * U+A71A MODIFIER LETTER LOWER RIGHT CORNER ANGLE: not included in any glyphset definition\n * U+F8FF : not included in any glyphset definition\n * U+FB00 LATIN SMALL LIGATURE FF: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FB03 LATIN SMALL LIGATURE FFI: not included in any glyphset definition\n * U+FB04 LATIN SMALL LIGATURE FFL: not included in any glyphset definition\n * U+FE20 COMBINING LIGATURE LEFT HALF: try adding caucasian-albanian\n * U+FE21 COMBINING LIGATURE RIGHT HALF: try adding caucasian-albanian\n * U+FE22 COMBINING DOUBLE TILDE LEFT HALF: try adding caucasian-albanian\n * U+FE23 COMBINING DOUBLE TILDE RIGHT HALF: try adding caucasian-albanian\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `cyrillic-ext`, `greek`, `greek-ext`, `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "First line in license file is:\n\n\"copyright (c) 2010-2014 by typoland lukasz dziedzic (team@latofonts.com) with reserved font name \"lato\"\"\n\nwhich does not match the expected format, similar to:\n\n\"Copyright 2022 The Familyname Project Authors (git url)\" [code: bad-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OFL license body text is correct", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 1 (MACINTOSH) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "License file OFL.txt exists but NameID 13 (LICENSE DESCRIPTION) value on platform 3 (WINDOWS) is not specified for that. Value was: \"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (https://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (https://scripts.sil.org/OFL). \" 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]", + "status": "FAIL", + "traceback": null + }, + { + "message": "For now we're still accepting http URLs, but you should consider using https instead.\n [code: http]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "FAIL" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=1, enc=0, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Please consider using HTTPS URLs at name table entry [plat=3, enc=1, name=13] [code: http-in-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "Could not infer the font license. Please ensure NameID 13 (LICENSE DESCRIPTION) is properly set.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "WARN" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "A few name table entries with ID=10 (NameID.DESCRIPTION) are longer than 200 characters. Please check whether those entries are copyright notices mistakenly stored in the description string entries by a bug in an old FontLab version. If that's the case, then such copyright notices must be removed from these entries. [code: too-long]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "WARN" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 497.1kb |\n | Hinted Size | 678.6kb |\n | Increase | 181.5kb |\n | Change | 36.5 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + }, + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 2.015; 2015-08-06; http://www.latofonts.com/', 'Version 2.015; 2015-08-06; http://www.latofonts.com/'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"Lato-MediumItalic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lato Medium Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "Font fullname \"Lato Medium Italic\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + }, + { + "message": "OK: Family name \"Lato\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Medium Italic\")", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lato\" in \"Lato Medium Italic\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + }, + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Copyright notices should match a pattern similar to:\n \"Copyright 2020 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"copyright (c) 2011-2015 by typoland lukasz dziedzic (http://www.typoland.com/) with reserved font name \"lato\". licensed under the sil open font license, version 1.1 (http://scripts.sil.org/ofl). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "FAIL" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name Table entry: Copyright notices should match a pattern similar to: \"Copyright 2019 The Familyname Project Authors (git url)\"\nBut instead we have got:\n\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \" [code: bad-notice-format]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: copyright field (\"Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL). \") contains \"Reserved Font Name\". This is an error except in a few specific rare cases. [code: rfn]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK: METADATA.pb font.style \"italic\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to normal fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/, http://www.typoland.com/ and http://www.typoland.com/\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 2000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: api_gfonts_ttFont", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lato Medium | Lato Medium |\n| Subfamily Name | Italic | Italic |\n| Full Name | Lato Medium Italic | Lato Medium Italic |\n| Poscript Name | Lato-MediumItalic | Lato-MediumItalic |\n| Typographic Family Name | Lato | Lato |\n| Typographic Subfamily Name | Medium Italic | Medium Italic |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 2.015; 2015-08-06; http://www.latofonts.com/\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligature_glyphs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "SKIP" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: ligatures", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + }, + { + "message": "Name table entry contains \"Reserved Font Name\" for a family name (\"Lato\". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL)) that differs from the currently used family name (Lato), which is fine. [code: legacy-familyname]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "WARN" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: upstream_yaml", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Found escaped chars at 'Copyright (c) 2011-2015 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name \\'. Please use an unicode string instead. [code: escaped-strings]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "It seems that \u0141ukasz Dziedzic is still not listed on the designers catalog. Please submit a photo and a link to a webpage where people can learn more about the work of this designer/typefoundry. [code: profile-not-found]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "WARN" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss01 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss02 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss03 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + }, + { + "message": "The stylistic set ss04 lacks a description string on the 'name' table. [code: missing-description]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "WARN" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"lato\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lato Medium)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "FAIL": 126, + "INFO": 91, + "PASS": 1480, + "SKIP": 460, + "WARN": 207 + } + }, + { + "checks": [ + { + "description": "Checking all files are in the same directory.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "All files are in the same directory.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the set of font files passed in the command line is not all in the\n same directory, then we warn the user since the tool will interpret the\n set of files as belonging to a single family (and it is unlikely that\n the user would store the files from a single family spreaded\n in several separate directories).\n ", + "result": "PASS" + }, + { + "description": "Each font in a family must have the same set of vertical metrics values.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Vertical metrics are the same across the family.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want all fonts within a family to have the same vertical metrics so\n their line spacing is consistent across the family.\n ", + "result": "PASS" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00305\n\n\t- glyph00363\n\n\t- glyph00467\n\n\t- glyph00468\n\n\t- glyph00469\n\n\t- glyph00470\n\n\t- glyph00471\n\n\t- glyph00472\n\n\t- glyph00473\n\n\t- glyph00474\n\n\t- glyph00494\n\n\t- glyph00495\n\n\t- glyph00496\n\n\t- glyph00507\n\n\t- glyph00511\n\n\t- glyph00512\n\n\t- glyph00515\n\n\t- glyph00516\n\n\t- glyph00517\n\n\t- glyph00519\n\n\t- glyph00520\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00529\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00533\n\n\t- glyph00534\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00539\n\n\t- glyph00540\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00550\n\n\t- glyph00551\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00556\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00566\n\n\t- glyph00567\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00572\n\n\t- glyph00573\n\n\t- glyph00574\n\n\t- glyph00922\n\n\t- glyph00947\n\n\t- glyph01108\n\n\t- glyph01110\n\n\t- glyph01112\n\n\t- glyph01113\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01152\n\n\t- glyph01162\n\n\t- glyph01174\n\n\t- glyph01198\n\n\t- glyph01233\n\n\t- glyph01237\n\n\t- glyph01238\n\n\t- glyph01246\n\n\t- glyph01247\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01314\n\n\t- glyph01315\n\n\t- glyph01349\n\n\t- glyph01350\n\n\t- glyph01363\n\n\t- glyph01364\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01379\n\n\t- glyph01415\n\n\t- glyph01421\n\n\t- glyph01422\n\n\t- glyph01424\n\n\t- glyph01425\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01441\n\n\t- glyph01461\n\n\t- glyph01462\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01479\n\n\t- glyph01480\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01549\n\n\t- glyph01550\n\n\t- glyph01556\n\n\t- glyph01557\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01571\n\n\t- glyph01572\n\n\t- glyph01573\n\n\t- glyph01574\n\n\t- glyph01575\n\n\t- glyph01576\n\n\t- glyph02084\n\n\t- glyph02110\n\n\t- glyph02143\n\n\t- glyph02276\n\n\t- glyph02557\n\n\t- glyph02558\n\n\t- glyph02564\n\n\t- glyph02587\n\n\t- glyph02590\n\n\t- glyph02593\n\n\t- glyph02601\n\n\t- glyph02605\n\n\t- glyph02606\n\n\t- glyph02610\n\n\t- glyph02615\n\n\t- glyph02627\n\n\t- glyph02635\n\n\t- glyph02641\n\n\t- glyph02646\n\n\t- glyph02649\n\n\t- glyph02652\n\n\t- glyph02658\n\n\t- glyph02664\n\n\t- glyph02668\n\n\t- glyph02671\n\n\t- glyph02675\n\n\t- glyph02678\n\n\t- glyph02680\n\n\t- glyph02683\n\n\t- glyph02686\n\n\t- glyph02689\n\n\t- glyph02692\n\n\t- glyph02695\n\n\t- glyph02698\n\n\t- glyph02701\n\n\t- glyph02704\n\n\t- glyph02707\n\n\t- glyph02711\n\n\t- glyph02714\n\n\t- glyph02717\n\n\t- glyph02720\n\n\t- glyph02723\n\n\t- glyph02726\n\n\t- glyph02728\n\n\t- glyph02782\n\n\t- glyph02785\n\n\t- glyph02788\n\n\t- glyph02794\n\n\t- glyph02805\n\n\t- glyph02806\n\n\t- glyph02807\n\n\t- glyph02808\n\n\t- glyph02810\n\n\t- glyph02811\n\n\t- glyph02812\n\n\t- glyph02813\n\n\t- glyph02814\n\n\t- glyph02815\n\n\t- glyph02816\n\n\t- glyph02817\n\n\t- glyph02818\n\n\t- glyph02820\n\n\t- glyph02821\n\n\t- glyph02822\n\n\t- glyph02823\n\n\t- glyph02824\n\n\t- glyph02825\n\n\t- glyph02826\n\n\t- glyph02827\n\n\t- glyph02828\n\n\t- glyph02829\n\n\t- glyph02830\n\n\t- glyph02831\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02834\n\n\t- glyph02835\n\n\t- glyph02836\n\n\t- glyph02837\n\n\t- glyph02838\n\n\t- glyph02839\n\n\t- glyph02840\n\n\t- glyph02841\n\n\t- glyph02842\n\n\t- glyph02843\n\n\t- glyph02844\n\n\t- glyph02845\n\n\t- glyph02846\n\n\t- glyph02847\n\n\t- glyph02848\n\n\t- glyph02849\n\n\t- glyph02850\n\n\t- glyph02851\n\n\t- glyph02852\n\n\t- glyph02853\n\n\t- glyph02854\n\n\t- glyph02855\n\n\t- glyph02856\n\n\t- glyph02857\n\n\t- glyph02858\n\n\t- glyph02859\n\n\t- glyph02860\n\n\t- glyph02861\n\n\t- glyph02862\n\n\t- glyph02863\n\n\t- glyph02864\n\n\t- glyph02865\n\n\t- glyph02866\n\n\t- glyph02867\n\n\t- glyph02868\n\n\t- glyph02869\n\n\t- glyph02870\n\n\t- glyph02871\n\n\t- glyph02872\n\n\t- glyph02873\n\n\t- glyph02874\n\n\t- glyph02875\n\n\t- glyph02876\n\n\t- glyph02877\n\n\t- glyph02878\n\n\t- glyph02879\n\n\t- glyph02880\n\n\t- glyph02881\n\n\t- glyph02882\n\n\t- glyph02883\n\n\t- glyph02884\n\n\t- glyph02885\n\n\t- glyph02886\n\n\t- glyph02887\n\n\t- glyph02888\n\n\t- glyph02889\n\n\t- glyph02890\n\n\t- glyph02891\n\n\t- glyph02892\n\n\t- glyph02893\n\n\t- glyph02894\n\n\t- glyph02895\n\n\t- glyph02896\n\n\t- glyph02897\n\n\t- glyph02898\n\n\t- glyph02899\n\n\t- glyph02900\n\n\t- glyph02901\n\n\t- glyph02902\n\n\t- glyph02903\n\n\t- glyph02904\n\n\t- glyph02905\n\n\t- glyph02906\n\n\t- glyph02907\n\n\t- glyph02908\n\n\t- glyph02909\n\n\t- glyph02910\n\n\t- glyph02911\n\n\t- glyph02912\n\n\t- glyph02913\n\n\t- glyph02914\n\n\t- glyph02915\n\n\t- glyph02916\n\n\t- glyph02917\n\n\t- glyph02918\n\n\t- glyph02919\n\n\t- glyph02920\n\n\t- glyph02921\n\n\t- glyph02922\n\n\t- glyph02923\n\n\t- glyph02924\n\n\t- glyph02925\n\n\t- glyph02926\n\n\t- glyph02927\n\n\t- glyph02928\n\n\t- glyph02929\n\n\t- glyph02930\n\n\t- glyph02931\n\n\t- glyph02932\n\n\t- glyph02933\n\n\t- glyph02934\n\n\t- glyph02935\n\n\t- glyph02936\n\n\t- glyph02937\n\n\t- glyph02938\n\n\t- glyph02939\n\n\t- glyph02940\n\n\t- glyph02941\n\n\t- glyph02942\n\n\t- glyph02943\n\n\t- glyph02944\n\n\t- glyph02945\n\n\t- glyph02946\n\n\t- glyph02947\n\n\t- glyph02948\n\n\t- glyph02949\n\n\t- glyph02950\n\n\t- glyph02951\n\n\t- glyph02952\n\n\t- glyph02953\n\n\t- glyph02954\n\n\t- glyph02955\n\n\t- glyph02956\n\n\t- glyph02957\n\n\t- glyph02958\n\n\t- glyph02959\n\n\t- glyph03006\n\n\t- glyph03007\n\n\t- glyph03008\n\n\t- glyph03009\n\n\t- glyph03010\n\n\t- glyph03011\n\n\t- glyph03012\n\n\t- glyph03013\n\n\t- glyph03014\n\n\t- glyph03015\n\n\t- glyph03016\n\n\t- glyph03017\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni023A\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni1E97\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni023A\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni1E97\tContours detected: 2\tExpected: 3\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No glyphs had components with scaling or rotation", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "PASS" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1228:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "WARN" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00305\n\n\t- glyph00363\n\n\t- glyph00467\n\n\t- glyph00468\n\n\t- glyph00469\n\n\t- glyph00470\n\n\t- glyph00471\n\n\t- glyph00472\n\n\t- glyph00473\n\n\t- glyph00474\n\n\t- glyph00494\n\n\t- glyph00495\n\n\t- glyph00496\n\n\t- glyph00507\n\n\t- glyph00511\n\n\t- glyph00512\n\n\t- glyph00515\n\n\t- glyph00516\n\n\t- glyph00517\n\n\t- glyph00519\n\n\t- glyph00520\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00529\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00533\n\n\t- glyph00534\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00539\n\n\t- glyph00540\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00550\n\n\t- glyph00551\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00556\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00566\n\n\t- glyph00567\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00572\n\n\t- glyph00573\n\n\t- glyph00574\n\n\t- glyph00922\n\n\t- glyph00947\n\n\t- glyph01108\n\n\t- glyph01112\n\n\t- glyph01113\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01152\n\n\t- glyph01162\n\n\t- glyph01174\n\n\t- glyph01198\n\n\t- glyph01233\n\n\t- glyph01237\n\n\t- glyph01238\n\n\t- glyph01246\n\n\t- glyph01247\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01314\n\n\t- glyph01315\n\n\t- glyph01349\n\n\t- glyph01350\n\n\t- glyph01363\n\n\t- glyph01364\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01379\n\n\t- glyph01415\n\n\t- glyph01422\n\n\t- glyph01423\n\n\t- glyph01424\n\n\t- glyph01425\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01441\n\n\t- glyph01461\n\n\t- glyph01462\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01479\n\n\t- glyph01480\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01549\n\n\t- glyph01550\n\n\t- glyph01556\n\n\t- glyph01557\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01571\n\n\t- glyph01572\n\n\t- glyph01573\n\n\t- glyph01574\n\n\t- glyph01575\n\n\t- glyph01576\n\n\t- glyph02084\n\n\t- glyph02110\n\n\t- glyph02143\n\n\t- glyph02276\n\n\t- glyph02557\n\n\t- glyph02558\n\n\t- glyph02564\n\n\t- glyph02587\n\n\t- glyph02590\n\n\t- glyph02593\n\n\t- glyph02601\n\n\t- glyph02605\n\n\t- glyph02606\n\n\t- glyph02610\n\n\t- glyph02615\n\n\t- glyph02627\n\n\t- glyph02635\n\n\t- glyph02641\n\n\t- glyph02646\n\n\t- glyph02649\n\n\t- glyph02652\n\n\t- glyph02658\n\n\t- glyph02664\n\n\t- glyph02668\n\n\t- glyph02671\n\n\t- glyph02675\n\n\t- glyph02678\n\n\t- glyph02680\n\n\t- glyph02683\n\n\t- glyph02686\n\n\t- glyph02689\n\n\t- glyph02692\n\n\t- glyph02695\n\n\t- glyph02698\n\n\t- glyph02701\n\n\t- glyph02704\n\n\t- glyph02707\n\n\t- glyph02711\n\n\t- glyph02714\n\n\t- glyph02717\n\n\t- glyph02720\n\n\t- glyph02723\n\n\t- glyph02726\n\n\t- glyph02728\n\n\t- glyph02782\n\n\t- glyph02785\n\n\t- glyph02788\n\n\t- glyph02794\n\n\t- glyph02805\n\n\t- glyph02806\n\n\t- glyph02807\n\n\t- glyph02808\n\n\t- glyph02810\n\n\t- glyph02811\n\n\t- glyph02812\n\n\t- glyph02813\n\n\t- glyph02814\n\n\t- glyph02815\n\n\t- glyph02816\n\n\t- glyph02817\n\n\t- glyph02818\n\n\t- glyph02820\n\n\t- glyph02821\n\n\t- glyph02822\n\n\t- glyph02823\n\n\t- glyph02824\n\n\t- glyph02825\n\n\t- glyph02826\n\n\t- glyph02827\n\n\t- glyph02828\n\n\t- glyph02829\n\n\t- glyph02830\n\n\t- glyph02831\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02834\n\n\t- glyph02835\n\n\t- glyph02836\n\n\t- glyph02837\n\n\t- glyph02838\n\n\t- glyph02839\n\n\t- glyph02840\n\n\t- glyph02841\n\n\t- glyph02842\n\n\t- glyph02843\n\n\t- glyph02844\n\n\t- glyph02845\n\n\t- glyph02846\n\n\t- glyph02847\n\n\t- glyph02848\n\n\t- glyph02849\n\n\t- glyph02850\n\n\t- glyph02851\n\n\t- glyph02852\n\n\t- glyph02853\n\n\t- glyph02854\n\n\t- glyph02855\n\n\t- glyph02856\n\n\t- glyph02857\n\n\t- glyph02858\n\n\t- glyph02859\n\n\t- glyph02860\n\n\t- glyph02861\n\n\t- glyph02862\n\n\t- glyph02863\n\n\t- glyph02864\n\n\t- glyph02865\n\n\t- glyph02866\n\n\t- glyph02867\n\n\t- glyph02868\n\n\t- glyph02869\n\n\t- glyph02870\n\n\t- glyph02871\n\n\t- glyph02872\n\n\t- glyph02873\n\n\t- glyph02874\n\n\t- glyph02875\n\n\t- glyph02876\n\n\t- glyph02877\n\n\t- glyph02878\n\n\t- glyph02879\n\n\t- glyph02880\n\n\t- glyph02881\n\n\t- glyph02882\n\n\t- glyph02883\n\n\t- glyph02884\n\n\t- glyph02885\n\n\t- glyph02886\n\n\t- glyph02887\n\n\t- glyph02888\n\n\t- glyph02889\n\n\t- glyph02890\n\n\t- glyph02891\n\n\t- glyph02892\n\n\t- glyph02893\n\n\t- glyph02894\n\n\t- glyph02895\n\n\t- glyph02896\n\n\t- glyph02897\n\n\t- glyph02898\n\n\t- glyph02899\n\n\t- glyph02900\n\n\t- glyph02901\n\n\t- glyph02902\n\n\t- glyph02903\n\n\t- glyph02904\n\n\t- glyph02905\n\n\t- glyph02906\n\n\t- glyph02907\n\n\t- glyph02908\n\n\t- glyph02909\n\n\t- glyph02910\n\n\t- glyph02911\n\n\t- glyph02912\n\n\t- glyph02913\n\n\t- glyph02914\n\n\t- glyph02915\n\n\t- glyph02916\n\n\t- glyph02917\n\n\t- glyph02918\n\n\t- glyph02919\n\n\t- glyph02920\n\n\t- glyph02921\n\n\t- glyph02922\n\n\t- glyph02923\n\n\t- glyph02924\n\n\t- glyph02925\n\n\t- glyph02926\n\n\t- glyph02927\n\n\t- glyph02928\n\n\t- glyph02929\n\n\t- glyph02930\n\n\t- glyph02931\n\n\t- glyph02932\n\n\t- glyph02933\n\n\t- glyph02934\n\n\t- glyph02935\n\n\t- glyph02936\n\n\t- glyph02937\n\n\t- glyph02938\n\n\t- glyph02939\n\n\t- glyph02940\n\n\t- glyph02941\n\n\t- glyph02942\n\n\t- glyph02943\n\n\t- glyph02944\n\n\t- glyph02945\n\n\t- glyph02946\n\n\t- glyph02947\n\n\t- glyph02948\n\n\t- glyph02949\n\n\t- glyph02950\n\n\t- glyph02951\n\n\t- glyph02952\n\n\t- glyph02953\n\n\t- glyph02954\n\n\t- glyph02955\n\n\t- glyph02956\n\n\t- glyph02957\n\n\t- glyph02958\n\n\t- glyph02959\n\n\t- glyph03006\n\n\t- glyph03007\n\n\t- glyph03008\n\n\t- glyph03009\n\n\t- glyph03010\n\n\t- glyph03011\n\n\t- glyph03012\n\n\t- glyph03013\n\n\t- glyph03014\n\n\t- glyph03015\n\n\t- glyph03016\n\n\t- glyph03017\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni042E\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni042E\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No glyphs had components with scaling or rotation", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "PASS" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1255:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "WARN" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00306\n\n\t- glyph00365\n\n\t- glyph00496\n\n\t- glyph00497\n\n\t- glyph00498\n\n\t- glyph00509\n\n\t- glyph00513\n\n\t- glyph00514\n\n\t- glyph00517\n\n\t- glyph00518\n\n\t- glyph00519\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00525\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00532\n\n\t- glyph00533\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00538\n\n\t- glyph00539\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00549\n\n\t- glyph00550\n\n\t- glyph00552\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00565\n\n\t- glyph00566\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00571\n\n\t- glyph00572\n\n\t- glyph00574\n\n\t- glyph00575\n\n\t- glyph00576\n\n\t- glyph00924\n\n\t- glyph00949\n\n\t- glyph01110\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01116\n\n\t- glyph01117\n\n\t- glyph01154\n\n\t- glyph01164\n\n\t- glyph01176\n\n\t- glyph01200\n\n\t- glyph01235\n\n\t- glyph01239\n\n\t- glyph01240\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01255\n\n\t- glyph01256\n\n\t- glyph01316\n\n\t- glyph01317\n\n\t- glyph01351\n\n\t- glyph01352\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01367\n\n\t- glyph01368\n\n\t- glyph01381\n\n\t- glyph01417\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01438\n\n\t- glyph01439\n\n\t- glyph01443\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01468\n\n\t- glyph01469\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01483\n\n\t- glyph01484\n\n\t- glyph01551\n\n\t- glyph01552\n\n\t- glyph01560\n\n\t- glyph01562\n\n\t- glyph01564\n\n\t- glyph01565\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01569\n\n\t- glyph01600\n\n\t- glyph01611\n\n\t- glyph01612\n\n\t- glyph01613\n\n\t- glyph01614\n\n\t- glyph01616\n\n\t- glyph01617\n\n\t- glyph01618\n\n\t- glyph01619\n\n\t- glyph01620\n\n\t- glyph01621\n\n\t- glyph01622\n\n\t- glyph01623\n\n\t- glyph01624\n\n\t- glyph01626\n\n\t- glyph01627\n\n\t- glyph01628\n\n\t- glyph01629\n\n\t- glyph01630\n\n\t- glyph01631\n\n\t- glyph01632\n\n\t- glyph01633\n\n\t- glyph01634\n\n\t- glyph01635\n\n\t- glyph01636\n\n\t- glyph01637\n\n\t- glyph01638\n\n\t- glyph01639\n\n\t- glyph01640\n\n\t- glyph01641\n\n\t- glyph01642\n\n\t- glyph01643\n\n\t- glyph01644\n\n\t- glyph01645\n\n\t- glyph01646\n\n\t- glyph01647\n\n\t- glyph01648\n\n\t- glyph01649\n\n\t- glyph01650\n\n\t- glyph01651\n\n\t- glyph01652\n\n\t- glyph01653\n\n\t- glyph01654\n\n\t- glyph01655\n\n\t- glyph01656\n\n\t- glyph01657\n\n\t- glyph01658\n\n\t- glyph01659\n\n\t- glyph01660\n\n\t- glyph01661\n\n\t- glyph01662\n\n\t- glyph01663\n\n\t- glyph01664\n\n\t- glyph01665\n\n\t- glyph01666\n\n\t- glyph01667\n\n\t- glyph01668\n\n\t- glyph01669\n\n\t- glyph01670\n\n\t- glyph01671\n\n\t- glyph01672\n\n\t- glyph01673\n\n\t- glyph01674\n\n\t- glyph01675\n\n\t- glyph01676\n\n\t- glyph01677\n\n\t- glyph01678\n\n\t- glyph01679\n\n\t- glyph01680\n\n\t- glyph01681\n\n\t- glyph01682\n\n\t- glyph01683\n\n\t- glyph01684\n\n\t- glyph01685\n\n\t- glyph01686\n\n\t- glyph01687\n\n\t- glyph01688\n\n\t- glyph01689\n\n\t- glyph01690\n\n\t- glyph01691\n\n\t- glyph01692\n\n\t- glyph01693\n\n\t- glyph01694\n\n\t- glyph01695\n\n\t- glyph01696\n\n\t- glyph01697\n\n\t- glyph01698\n\n\t- glyph01699\n\n\t- glyph01700\n\n\t- glyph01701\n\n\t- glyph01702\n\n\t- glyph01703\n\n\t- glyph01704\n\n\t- glyph01705\n\n\t- glyph01706\n\n\t- glyph01707\n\n\t- glyph01708\n\n\t- glyph01709\n\n\t- glyph01710\n\n\t- glyph01711\n\n\t- glyph01712\n\n\t- glyph01713\n\n\t- glyph01714\n\n\t- glyph01715\n\n\t- glyph01716\n\n\t- glyph01717\n\n\t- glyph01718\n\n\t- glyph01719\n\n\t- glyph01720\n\n\t- glyph01721\n\n\t- glyph01722\n\n\t- glyph01723\n\n\t- glyph01724\n\n\t- glyph01725\n\n\t- glyph01726\n\n\t- glyph01727\n\n\t- glyph01728\n\n\t- glyph01729\n\n\t- glyph01730\n\n\t- glyph01731\n\n\t- glyph01732\n\n\t- glyph01733\n\n\t- glyph01734\n\n\t- glyph01735\n\n\t- glyph01736\n\n\t- glyph01737\n\n\t- glyph01738\n\n\t- glyph01739\n\n\t- glyph01740\n\n\t- glyph01741\n\n\t- glyph01742\n\n\t- glyph01743\n\n\t- glyph01744\n\n\t- glyph01745\n\n\t- glyph01746\n\n\t- glyph01747\n\n\t- glyph01748\n\n\t- glyph01749\n\n\t- glyph01750\n\n\t- glyph01751\n\n\t- glyph01752\n\n\t- glyph01753\n\n\t- glyph01754\n\n\t- glyph01755\n\n\t- glyph01756\n\n\t- glyph01757\n\n\t- glyph01758\n\n\t- glyph01759\n\n\t- glyph01760\n\n\t- glyph01761\n\n\t- glyph01762\n\n\t- glyph01763\n\n\t- glyph01764\n\n\t- glyph01765\n\n\t- glyph01786\n\n\t- glyph01823\n\n\t- glyph01824\n\n\t- glyph01825\n\n\t- glyph01826\n\n\t- glyph01827\n\n\t- glyph01828\n\n\t- glyph01829\n\n\t- glyph01830\n\n\t- glyph01831\n\n\t- glyph01832\n\n\t- glyph01833\n\n\t- glyph01834\n\n\t- glyph02314\n\n\t- glyph02339\n\n\t- glyph02371\n\n\t- glyph02502\n\n\t- glyph02783\n\n\t- glyph02784\n\n\t- glyph02791\n\n\t- glyph02814\n\n\t- glyph02817\n\n\t- glyph02820\n\n\t- glyph02828\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02837\n\n\t- glyph02842\n\n\t- glyph02860\n\n\t- glyph02866\n\n\t- glyph02871\n\n\t- glyph02874\n\n\t- glyph02877\n\n\t- glyph02883\n\n\t- glyph02889\n\n\t- glyph02893\n\n\t- glyph02896\n\n\t- glyph02900\n\n\t- glyph02903\n\n\t- glyph02905\n\n\t- glyph02908\n\n\t- glyph02911\n\n\t- glyph02914\n\n\t- glyph02917\n\n\t- glyph02920\n\n\t- glyph02923\n\n\t- glyph02926\n\n\t- glyph02929\n\n\t- glyph02932\n\n\t- glyph02936\n\n\t- glyph02939\n\n\t- glyph02942\n\n\t- glyph02945\n\n\t- glyph02948\n\n\t- glyph02951\n\n\t- glyph02953\n\n\t- glyph03007\n\n\t- glyph03010\n\n\t- glyph03013\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs had components with scaling or rotation\nor inverted outline direction:\n\n* glyph01798 (component glyph00180)\n* glyph01798 (component dotaccent)\n* glyph01798 (component dotaccent)\n* uni034B (component glyph00180)\n* uni034B (component dotaccent)\n* uni034B (component dotaccent)\n [code: transformed-components]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "FAIL" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1173:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "PASS" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00306\n\n\t- glyph00365\n\n\t- glyph00496\n\n\t- glyph00497\n\n\t- glyph00498\n\n\t- glyph00509\n\n\t- glyph00513\n\n\t- glyph00514\n\n\t- glyph00517\n\n\t- glyph00518\n\n\t- glyph00519\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00525\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00532\n\n\t- glyph00533\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00538\n\n\t- glyph00539\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00549\n\n\t- glyph00550\n\n\t- glyph00552\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00565\n\n\t- glyph00566\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00571\n\n\t- glyph00572\n\n\t- glyph00574\n\n\t- glyph00575\n\n\t- glyph00576\n\n\t- glyph00924\n\n\t- glyph00949\n\n\t- glyph01110\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01116\n\n\t- glyph01117\n\n\t- glyph01154\n\n\t- glyph01164\n\n\t- glyph01176\n\n\t- glyph01200\n\n\t- glyph01235\n\n\t- glyph01239\n\n\t- glyph01240\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01255\n\n\t- glyph01256\n\n\t- glyph01316\n\n\t- glyph01317\n\n\t- glyph01325\n\n\t- glyph01351\n\n\t- glyph01352\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01367\n\n\t- glyph01368\n\n\t- glyph01381\n\n\t- glyph01417\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01438\n\n\t- glyph01439\n\n\t- glyph01443\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01468\n\n\t- glyph01469\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01483\n\n\t- glyph01484\n\n\t- glyph01551\n\n\t- glyph01552\n\n\t- glyph01560\n\n\t- glyph01562\n\n\t- glyph01564\n\n\t- glyph01565\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01569\n\n\t- glyph01600\n\n\t- glyph01611\n\n\t- glyph01612\n\n\t- glyph01613\n\n\t- glyph01614\n\n\t- glyph01616\n\n\t- glyph01617\n\n\t- glyph01618\n\n\t- glyph01619\n\n\t- glyph01620\n\n\t- glyph01621\n\n\t- glyph01622\n\n\t- glyph01623\n\n\t- glyph01624\n\n\t- glyph01626\n\n\t- glyph01627\n\n\t- glyph01628\n\n\t- glyph01629\n\n\t- glyph01630\n\n\t- glyph01631\n\n\t- glyph01632\n\n\t- glyph01633\n\n\t- glyph01634\n\n\t- glyph01635\n\n\t- glyph01636\n\n\t- glyph01637\n\n\t- glyph01638\n\n\t- glyph01639\n\n\t- glyph01640\n\n\t- glyph01641\n\n\t- glyph01642\n\n\t- glyph01643\n\n\t- glyph01644\n\n\t- glyph01645\n\n\t- glyph01646\n\n\t- glyph01647\n\n\t- glyph01648\n\n\t- glyph01649\n\n\t- glyph01650\n\n\t- glyph01651\n\n\t- glyph01652\n\n\t- glyph01653\n\n\t- glyph01654\n\n\t- glyph01655\n\n\t- glyph01656\n\n\t- glyph01657\n\n\t- glyph01658\n\n\t- glyph01659\n\n\t- glyph01660\n\n\t- glyph01661\n\n\t- glyph01662\n\n\t- glyph01663\n\n\t- glyph01664\n\n\t- glyph01665\n\n\t- glyph01666\n\n\t- glyph01667\n\n\t- glyph01668\n\n\t- glyph01669\n\n\t- glyph01670\n\n\t- glyph01671\n\n\t- glyph01672\n\n\t- glyph01673\n\n\t- glyph01674\n\n\t- glyph01675\n\n\t- glyph01676\n\n\t- glyph01677\n\n\t- glyph01678\n\n\t- glyph01679\n\n\t- glyph01680\n\n\t- glyph01681\n\n\t- glyph01682\n\n\t- glyph01683\n\n\t- glyph01684\n\n\t- glyph01685\n\n\t- glyph01686\n\n\t- glyph01687\n\n\t- glyph01688\n\n\t- glyph01689\n\n\t- glyph01690\n\n\t- glyph01691\n\n\t- glyph01692\n\n\t- glyph01693\n\n\t- glyph01694\n\n\t- glyph01695\n\n\t- glyph01696\n\n\t- glyph01697\n\n\t- glyph01698\n\n\t- glyph01699\n\n\t- glyph01700\n\n\t- glyph01701\n\n\t- glyph01702\n\n\t- glyph01703\n\n\t- glyph01704\n\n\t- glyph01705\n\n\t- glyph01706\n\n\t- glyph01707\n\n\t- glyph01708\n\n\t- glyph01709\n\n\t- glyph01710\n\n\t- glyph01711\n\n\t- glyph01712\n\n\t- glyph01713\n\n\t- glyph01714\n\n\t- glyph01715\n\n\t- glyph01716\n\n\t- glyph01717\n\n\t- glyph01718\n\n\t- glyph01719\n\n\t- glyph01720\n\n\t- glyph01721\n\n\t- glyph01722\n\n\t- glyph01723\n\n\t- glyph01724\n\n\t- glyph01725\n\n\t- glyph01726\n\n\t- glyph01727\n\n\t- glyph01728\n\n\t- glyph01729\n\n\t- glyph01730\n\n\t- glyph01731\n\n\t- glyph01732\n\n\t- glyph01733\n\n\t- glyph01734\n\n\t- glyph01735\n\n\t- glyph01736\n\n\t- glyph01737\n\n\t- glyph01738\n\n\t- glyph01739\n\n\t- glyph01740\n\n\t- glyph01741\n\n\t- glyph01742\n\n\t- glyph01743\n\n\t- glyph01744\n\n\t- glyph01745\n\n\t- glyph01746\n\n\t- glyph01747\n\n\t- glyph01748\n\n\t- glyph01749\n\n\t- glyph01750\n\n\t- glyph01751\n\n\t- glyph01752\n\n\t- glyph01753\n\n\t- glyph01754\n\n\t- glyph01755\n\n\t- glyph01756\n\n\t- glyph01757\n\n\t- glyph01758\n\n\t- glyph01759\n\n\t- glyph01760\n\n\t- glyph01761\n\n\t- glyph01762\n\n\t- glyph01763\n\n\t- glyph01764\n\n\t- glyph01765\n\n\t- glyph01786\n\n\t- glyph01823\n\n\t- glyph01824\n\n\t- glyph01825\n\n\t- glyph01826\n\n\t- glyph01827\n\n\t- glyph01828\n\n\t- glyph01829\n\n\t- glyph01830\n\n\t- glyph01831\n\n\t- glyph01832\n\n\t- glyph01833\n\n\t- glyph01834\n\n\t- glyph02314\n\n\t- glyph02339\n\n\t- glyph02371\n\n\t- glyph02502\n\n\t- glyph02783\n\n\t- glyph02784\n\n\t- glyph02791\n\n\t- glyph02814\n\n\t- glyph02817\n\n\t- glyph02820\n\n\t- glyph02828\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02837\n\n\t- glyph02842\n\n\t- glyph02860\n\n\t- glyph02866\n\n\t- glyph02871\n\n\t- glyph02874\n\n\t- glyph02877\n\n\t- glyph02883\n\n\t- glyph02889\n\n\t- glyph02893\n\n\t- glyph02896\n\n\t- glyph02900\n\n\t- glyph02903\n\n\t- glyph02905\n\n\t- glyph02908\n\n\t- glyph02911\n\n\t- glyph02914\n\n\t- glyph02917\n\n\t- glyph02920\n\n\t- glyph02923\n\n\t- glyph02926\n\n\t- glyph02929\n\n\t- glyph02932\n\n\t- glyph02936\n\n\t- glyph02939\n\n\t- glyph02942\n\n\t- glyph02945\n\n\t- glyph02948\n\n\t- glyph02951\n\n\t- glyph02953\n\n\t- glyph03007\n\n\t- glyph03010\n\n\t- glyph03013\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni0246\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni0246\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs had components with scaling or rotation\nor inverted outline direction:\n\n* glyph01798 (component glyph00180)\n* glyph01798 (component dotaccent)\n* glyph01798 (component dotaccent)\n* uni034B (component glyph00180)\n* uni034B (component dotaccent)\n* uni034B (component dotaccent)\n [code: transformed-components]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "FAIL" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1166:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "PASS" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00306\n\n\t- glyph00365\n\n\t- glyph00469\n\n\t- glyph00470\n\n\t- glyph00471\n\n\t- glyph00472\n\n\t- glyph00473\n\n\t- glyph00474\n\n\t- glyph00475\n\n\t- glyph00476\n\n\t- glyph00496\n\n\t- glyph00497\n\n\t- glyph00498\n\n\t- glyph00509\n\n\t- glyph00513\n\n\t- glyph00514\n\n\t- glyph00517\n\n\t- glyph00518\n\n\t- glyph00519\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00525\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00532\n\n\t- glyph00533\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00538\n\n\t- glyph00539\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00549\n\n\t- glyph00550\n\n\t- glyph00552\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00565\n\n\t- glyph00566\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00571\n\n\t- glyph00572\n\n\t- glyph00574\n\n\t- glyph00575\n\n\t- glyph00576\n\n\t- glyph00924\n\n\t- glyph00949\n\n\t- glyph01110\n\n\t- glyph01112\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01116\n\n\t- glyph01117\n\n\t- glyph01154\n\n\t- glyph01164\n\n\t- glyph01176\n\n\t- glyph01200\n\n\t- glyph01235\n\n\t- glyph01239\n\n\t- glyph01240\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01255\n\n\t- glyph01256\n\n\t- glyph01316\n\n\t- glyph01317\n\n\t- glyph01351\n\n\t- glyph01352\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01367\n\n\t- glyph01368\n\n\t- glyph01381\n\n\t- glyph01417\n\n\t- glyph01423\n\n\t- glyph01424\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01438\n\n\t- glyph01439\n\n\t- glyph01443\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01468\n\n\t- glyph01469\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01483\n\n\t- glyph01484\n\n\t- glyph01551\n\n\t- glyph01552\n\n\t- glyph01560\n\n\t- glyph01562\n\n\t- glyph01564\n\n\t- glyph01565\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01569\n\n\t- glyph01600\n\n\t- glyph01611\n\n\t- glyph01612\n\n\t- glyph01613\n\n\t- glyph01614\n\n\t- glyph01616\n\n\t- glyph01617\n\n\t- glyph01618\n\n\t- glyph01619\n\n\t- glyph01620\n\n\t- glyph01621\n\n\t- glyph01622\n\n\t- glyph01623\n\n\t- glyph01624\n\n\t- glyph01626\n\n\t- glyph01627\n\n\t- glyph01628\n\n\t- glyph01629\n\n\t- glyph01630\n\n\t- glyph01631\n\n\t- glyph01632\n\n\t- glyph01633\n\n\t- glyph01634\n\n\t- glyph01635\n\n\t- glyph01636\n\n\t- glyph01637\n\n\t- glyph01638\n\n\t- glyph01639\n\n\t- glyph01640\n\n\t- glyph01641\n\n\t- glyph01642\n\n\t- glyph01643\n\n\t- glyph01644\n\n\t- glyph01645\n\n\t- glyph01646\n\n\t- glyph01647\n\n\t- glyph01648\n\n\t- glyph01649\n\n\t- glyph01650\n\n\t- glyph01651\n\n\t- glyph01652\n\n\t- glyph01653\n\n\t- glyph01654\n\n\t- glyph01655\n\n\t- glyph01656\n\n\t- glyph01657\n\n\t- glyph01658\n\n\t- glyph01659\n\n\t- glyph01660\n\n\t- glyph01661\n\n\t- glyph01662\n\n\t- glyph01663\n\n\t- glyph01664\n\n\t- glyph01665\n\n\t- glyph01666\n\n\t- glyph01667\n\n\t- glyph01668\n\n\t- glyph01669\n\n\t- glyph01670\n\n\t- glyph01671\n\n\t- glyph01672\n\n\t- glyph01673\n\n\t- glyph01674\n\n\t- glyph01675\n\n\t- glyph01676\n\n\t- glyph01677\n\n\t- glyph01678\n\n\t- glyph01679\n\n\t- glyph01680\n\n\t- glyph01681\n\n\t- glyph01682\n\n\t- glyph01683\n\n\t- glyph01684\n\n\t- glyph01685\n\n\t- glyph01686\n\n\t- glyph01687\n\n\t- glyph01688\n\n\t- glyph01689\n\n\t- glyph01690\n\n\t- glyph01691\n\n\t- glyph01692\n\n\t- glyph01693\n\n\t- glyph01694\n\n\t- glyph01695\n\n\t- glyph01696\n\n\t- glyph01697\n\n\t- glyph01698\n\n\t- glyph01699\n\n\t- glyph01700\n\n\t- glyph01701\n\n\t- glyph01702\n\n\t- glyph01703\n\n\t- glyph01704\n\n\t- glyph01705\n\n\t- glyph01706\n\n\t- glyph01707\n\n\t- glyph01708\n\n\t- glyph01709\n\n\t- glyph01710\n\n\t- glyph01711\n\n\t- glyph01712\n\n\t- glyph01713\n\n\t- glyph01714\n\n\t- glyph01715\n\n\t- glyph01716\n\n\t- glyph01717\n\n\t- glyph01718\n\n\t- glyph01719\n\n\t- glyph01720\n\n\t- glyph01721\n\n\t- glyph01722\n\n\t- glyph01723\n\n\t- glyph01724\n\n\t- glyph01725\n\n\t- glyph01726\n\n\t- glyph01727\n\n\t- glyph01728\n\n\t- glyph01729\n\n\t- glyph01730\n\n\t- glyph01731\n\n\t- glyph01732\n\n\t- glyph01733\n\n\t- glyph01734\n\n\t- glyph01735\n\n\t- glyph01736\n\n\t- glyph01737\n\n\t- glyph01738\n\n\t- glyph01739\n\n\t- glyph01740\n\n\t- glyph01741\n\n\t- glyph01742\n\n\t- glyph01743\n\n\t- glyph01744\n\n\t- glyph01745\n\n\t- glyph01746\n\n\t- glyph01747\n\n\t- glyph01748\n\n\t- glyph01749\n\n\t- glyph01750\n\n\t- glyph01751\n\n\t- glyph01752\n\n\t- glyph01753\n\n\t- glyph01754\n\n\t- glyph01755\n\n\t- glyph01756\n\n\t- glyph01757\n\n\t- glyph01758\n\n\t- glyph01759\n\n\t- glyph01760\n\n\t- glyph01761\n\n\t- glyph01762\n\n\t- glyph01763\n\n\t- glyph01764\n\n\t- glyph01765\n\n\t- glyph01786\n\n\t- glyph01823\n\n\t- glyph01824\n\n\t- glyph01825\n\n\t- glyph01826\n\n\t- glyph01827\n\n\t- glyph01828\n\n\t- glyph01829\n\n\t- glyph01830\n\n\t- glyph01831\n\n\t- glyph01832\n\n\t- glyph01833\n\n\t- glyph01834\n\n\t- glyph02314\n\n\t- glyph02339\n\n\t- glyph02371\n\n\t- glyph02502\n\n\t- glyph02783\n\n\t- glyph02784\n\n\t- glyph02791\n\n\t- glyph02814\n\n\t- glyph02817\n\n\t- glyph02820\n\n\t- glyph02828\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02837\n\n\t- glyph02842\n\n\t- glyph02860\n\n\t- glyph02866\n\n\t- glyph02871\n\n\t- glyph02874\n\n\t- glyph02877\n\n\t- glyph02883\n\n\t- glyph02889\n\n\t- glyph02893\n\n\t- glyph02896\n\n\t- glyph02900\n\n\t- glyph02903\n\n\t- glyph02905\n\n\t- glyph02908\n\n\t- glyph02911\n\n\t- glyph02914\n\n\t- glyph02917\n\n\t- glyph02920\n\n\t- glyph02923\n\n\t- glyph02926\n\n\t- glyph02929\n\n\t- glyph02932\n\n\t- glyph02936\n\n\t- glyph02939\n\n\t- glyph02942\n\n\t- glyph02945\n\n\t- glyph02948\n\n\t- glyph02951\n\n\t- glyph02953\n\n\t- glyph03007\n\n\t- glyph03010\n\n\t- glyph03013\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni023A\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni023A\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs had components with scaling or rotation\nor inverted outline direction:\n\n* glyph01798 (component glyph00180)\n* glyph01798 (component dotaccent)\n* glyph01798 (component dotaccent)\n* uni034B (component glyph00180)\n* uni034B (component dotaccent)\n* uni034B (component dotaccent)\n [code: transformed-components]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "FAIL" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1211:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "PASS" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00305\n\n\t- glyph00363\n\n\t- glyph00468\n\n\t- glyph00470\n\n\t- glyph00472\n\n\t- glyph00474\n\n\t- glyph00494\n\n\t- glyph00495\n\n\t- glyph00496\n\n\t- glyph00507\n\n\t- glyph00511\n\n\t- glyph00512\n\n\t- glyph00515\n\n\t- glyph00516\n\n\t- glyph00517\n\n\t- glyph00519\n\n\t- glyph00520\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00529\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00533\n\n\t- glyph00534\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00539\n\n\t- glyph00540\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00550\n\n\t- glyph00551\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00556\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00566\n\n\t- glyph00567\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00572\n\n\t- glyph00573\n\n\t- glyph00574\n\n\t- glyph00922\n\n\t- glyph00947\n\n\t- glyph01108\n\n\t- glyph01110\n\n\t- glyph01112\n\n\t- glyph01113\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01152\n\n\t- glyph01162\n\n\t- glyph01174\n\n\t- glyph01198\n\n\t- glyph01233\n\n\t- glyph01237\n\n\t- glyph01238\n\n\t- glyph01246\n\n\t- glyph01247\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01314\n\n\t- glyph01315\n\n\t- glyph01349\n\n\t- glyph01350\n\n\t- glyph01363\n\n\t- glyph01364\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01379\n\n\t- glyph01415\n\n\t- glyph01421\n\n\t- glyph01424\n\n\t- glyph01425\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01441\n\n\t- glyph01461\n\n\t- glyph01462\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01479\n\n\t- glyph01480\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01549\n\n\t- glyph01550\n\n\t- glyph01556\n\n\t- glyph01557\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01571\n\n\t- glyph01572\n\n\t- glyph01573\n\n\t- glyph01574\n\n\t- glyph01575\n\n\t- glyph01576\n\n\t- glyph02084\n\n\t- glyph02110\n\n\t- glyph02143\n\n\t- glyph02276\n\n\t- glyph02557\n\n\t- glyph02558\n\n\t- glyph02564\n\n\t- glyph02587\n\n\t- glyph02590\n\n\t- glyph02593\n\n\t- glyph02601\n\n\t- glyph02605\n\n\t- glyph02606\n\n\t- glyph02610\n\n\t- glyph02615\n\n\t- glyph02627\n\n\t- glyph02635\n\n\t- glyph02641\n\n\t- glyph02646\n\n\t- glyph02649\n\n\t- glyph02652\n\n\t- glyph02658\n\n\t- glyph02664\n\n\t- glyph02668\n\n\t- glyph02671\n\n\t- glyph02675\n\n\t- glyph02678\n\n\t- glyph02680\n\n\t- glyph02683\n\n\t- glyph02686\n\n\t- glyph02689\n\n\t- glyph02692\n\n\t- glyph02695\n\n\t- glyph02698\n\n\t- glyph02701\n\n\t- glyph02704\n\n\t- glyph02707\n\n\t- glyph02711\n\n\t- glyph02714\n\n\t- glyph02717\n\n\t- glyph02720\n\n\t- glyph02723\n\n\t- glyph02726\n\n\t- glyph02728\n\n\t- glyph02782\n\n\t- glyph02785\n\n\t- glyph02788\n\n\t- glyph02794\n\n\t- glyph02805\n\n\t- glyph02806\n\n\t- glyph02807\n\n\t- glyph02808\n\n\t- glyph02810\n\n\t- glyph02811\n\n\t- glyph02812\n\n\t- glyph02813\n\n\t- glyph02814\n\n\t- glyph02815\n\n\t- glyph02816\n\n\t- glyph02817\n\n\t- glyph02818\n\n\t- glyph02820\n\n\t- glyph02821\n\n\t- glyph02822\n\n\t- glyph02823\n\n\t- glyph02824\n\n\t- glyph02825\n\n\t- glyph02826\n\n\t- glyph02827\n\n\t- glyph02828\n\n\t- glyph02829\n\n\t- glyph02830\n\n\t- glyph02831\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02834\n\n\t- glyph02835\n\n\t- glyph02836\n\n\t- glyph02837\n\n\t- glyph02838\n\n\t- glyph02839\n\n\t- glyph02840\n\n\t- glyph02841\n\n\t- glyph02842\n\n\t- glyph02843\n\n\t- glyph02844\n\n\t- glyph02845\n\n\t- glyph02846\n\n\t- glyph02847\n\n\t- glyph02848\n\n\t- glyph02849\n\n\t- glyph02850\n\n\t- glyph02851\n\n\t- glyph02852\n\n\t- glyph02853\n\n\t- glyph02854\n\n\t- glyph02855\n\n\t- glyph02856\n\n\t- glyph02857\n\n\t- glyph02858\n\n\t- glyph02859\n\n\t- glyph02860\n\n\t- glyph02861\n\n\t- glyph02862\n\n\t- glyph02863\n\n\t- glyph02864\n\n\t- glyph02865\n\n\t- glyph02866\n\n\t- glyph02867\n\n\t- glyph02868\n\n\t- glyph02869\n\n\t- glyph02870\n\n\t- glyph02871\n\n\t- glyph02872\n\n\t- glyph02873\n\n\t- glyph02874\n\n\t- glyph02875\n\n\t- glyph02876\n\n\t- glyph02877\n\n\t- glyph02878\n\n\t- glyph02879\n\n\t- glyph02880\n\n\t- glyph02881\n\n\t- glyph02882\n\n\t- glyph02883\n\n\t- glyph02884\n\n\t- glyph02885\n\n\t- glyph02886\n\n\t- glyph02887\n\n\t- glyph02888\n\n\t- glyph02889\n\n\t- glyph02890\n\n\t- glyph02891\n\n\t- glyph02892\n\n\t- glyph02893\n\n\t- glyph02894\n\n\t- glyph02895\n\n\t- glyph02896\n\n\t- glyph02897\n\n\t- glyph02898\n\n\t- glyph02899\n\n\t- glyph02900\n\n\t- glyph02901\n\n\t- glyph02902\n\n\t- glyph02903\n\n\t- glyph02904\n\n\t- glyph02905\n\n\t- glyph02906\n\n\t- glyph02907\n\n\t- glyph02908\n\n\t- glyph02909\n\n\t- glyph02910\n\n\t- glyph02911\n\n\t- glyph02912\n\n\t- glyph02913\n\n\t- glyph02914\n\n\t- glyph02915\n\n\t- glyph02916\n\n\t- glyph02917\n\n\t- glyph02918\n\n\t- glyph02919\n\n\t- glyph02920\n\n\t- glyph02921\n\n\t- glyph02922\n\n\t- glyph02923\n\n\t- glyph02924\n\n\t- glyph02925\n\n\t- glyph02926\n\n\t- glyph02927\n\n\t- glyph02928\n\n\t- glyph02929\n\n\t- glyph02930\n\n\t- glyph02931\n\n\t- glyph02932\n\n\t- glyph02933\n\n\t- glyph02934\n\n\t- glyph02935\n\n\t- glyph02936\n\n\t- glyph02937\n\n\t- glyph02938\n\n\t- glyph02939\n\n\t- glyph02940\n\n\t- glyph02941\n\n\t- glyph02942\n\n\t- glyph02943\n\n\t- glyph02944\n\n\t- glyph02945\n\n\t- glyph02946\n\n\t- glyph02947\n\n\t- glyph02948\n\n\t- glyph02949\n\n\t- glyph02950\n\n\t- glyph02951\n\n\t- glyph02952\n\n\t- glyph02953\n\n\t- glyph02954\n\n\t- glyph02955\n\n\t- glyph02956\n\n\t- glyph02957\n\n\t- glyph02958\n\n\t- glyph02959\n\n\t- glyph03006\n\n\t- glyph03007\n\n\t- glyph03008\n\n\t- glyph03009\n\n\t- glyph03010\n\n\t- glyph03011\n\n\t- glyph03012\n\n\t- glyph03013\n\n\t- glyph03014\n\n\t- glyph03015\n\n\t- glyph03016\n\n\t- glyph03017\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni0246\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni0247\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni1E97\tContours detected: 1\tExpected: 3\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni0246\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni0247\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni1E97\tContours detected: 1\tExpected: 3\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "No glyphs had components with scaling or rotation", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "PASS" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1213:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "WARN" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00306\n\n\t- glyph00365\n\n\t- glyph00469\n\n\t- glyph00471\n\n\t- glyph00473\n\n\t- glyph00475\n\n\t- glyph00496\n\n\t- glyph00497\n\n\t- glyph00498\n\n\t- glyph00509\n\n\t- glyph00513\n\n\t- glyph00514\n\n\t- glyph00517\n\n\t- glyph00518\n\n\t- glyph00519\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00525\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00532\n\n\t- glyph00533\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00538\n\n\t- glyph00539\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00549\n\n\t- glyph00550\n\n\t- glyph00552\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00565\n\n\t- glyph00566\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00571\n\n\t- glyph00572\n\n\t- glyph00574\n\n\t- glyph00575\n\n\t- glyph00576\n\n\t- glyph00924\n\n\t- glyph00949\n\n\t- glyph01110\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01116\n\n\t- glyph01117\n\n\t- glyph01154\n\n\t- glyph01164\n\n\t- glyph01176\n\n\t- glyph01200\n\n\t- glyph01235\n\n\t- glyph01239\n\n\t- glyph01240\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01255\n\n\t- glyph01256\n\n\t- glyph01316\n\n\t- glyph01317\n\n\t- glyph01325\n\n\t- glyph01351\n\n\t- glyph01352\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01367\n\n\t- glyph01368\n\n\t- glyph01381\n\n\t- glyph01417\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01438\n\n\t- glyph01439\n\n\t- glyph01443\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01468\n\n\t- glyph01469\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01483\n\n\t- glyph01484\n\n\t- glyph01551\n\n\t- glyph01552\n\n\t- glyph01560\n\n\t- glyph01562\n\n\t- glyph01564\n\n\t- glyph01565\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01569\n\n\t- glyph01600\n\n\t- glyph01611\n\n\t- glyph01612\n\n\t- glyph01613\n\n\t- glyph01614\n\n\t- glyph01616\n\n\t- glyph01617\n\n\t- glyph01618\n\n\t- glyph01619\n\n\t- glyph01620\n\n\t- glyph01621\n\n\t- glyph01622\n\n\t- glyph01623\n\n\t- glyph01624\n\n\t- glyph01626\n\n\t- glyph01627\n\n\t- glyph01628\n\n\t- glyph01629\n\n\t- glyph01630\n\n\t- glyph01631\n\n\t- glyph01632\n\n\t- glyph01633\n\n\t- glyph01634\n\n\t- glyph01635\n\n\t- glyph01636\n\n\t- glyph01637\n\n\t- glyph01638\n\n\t- glyph01639\n\n\t- glyph01640\n\n\t- glyph01641\n\n\t- glyph01642\n\n\t- glyph01643\n\n\t- glyph01644\n\n\t- glyph01645\n\n\t- glyph01646\n\n\t- glyph01647\n\n\t- glyph01648\n\n\t- glyph01649\n\n\t- glyph01650\n\n\t- glyph01651\n\n\t- glyph01652\n\n\t- glyph01653\n\n\t- glyph01654\n\n\t- glyph01655\n\n\t- glyph01656\n\n\t- glyph01657\n\n\t- glyph01658\n\n\t- glyph01659\n\n\t- glyph01660\n\n\t- glyph01661\n\n\t- glyph01662\n\n\t- glyph01663\n\n\t- glyph01664\n\n\t- glyph01665\n\n\t- glyph01666\n\n\t- glyph01667\n\n\t- glyph01668\n\n\t- glyph01669\n\n\t- glyph01670\n\n\t- glyph01671\n\n\t- glyph01672\n\n\t- glyph01673\n\n\t- glyph01674\n\n\t- glyph01675\n\n\t- glyph01676\n\n\t- glyph01677\n\n\t- glyph01678\n\n\t- glyph01679\n\n\t- glyph01680\n\n\t- glyph01681\n\n\t- glyph01682\n\n\t- glyph01683\n\n\t- glyph01684\n\n\t- glyph01685\n\n\t- glyph01686\n\n\t- glyph01687\n\n\t- glyph01688\n\n\t- glyph01689\n\n\t- glyph01690\n\n\t- glyph01691\n\n\t- glyph01692\n\n\t- glyph01693\n\n\t- glyph01694\n\n\t- glyph01695\n\n\t- glyph01696\n\n\t- glyph01697\n\n\t- glyph01698\n\n\t- glyph01699\n\n\t- glyph01700\n\n\t- glyph01701\n\n\t- glyph01702\n\n\t- glyph01703\n\n\t- glyph01704\n\n\t- glyph01705\n\n\t- glyph01706\n\n\t- glyph01707\n\n\t- glyph01708\n\n\t- glyph01709\n\n\t- glyph01710\n\n\t- glyph01711\n\n\t- glyph01712\n\n\t- glyph01713\n\n\t- glyph01714\n\n\t- glyph01715\n\n\t- glyph01716\n\n\t- glyph01717\n\n\t- glyph01718\n\n\t- glyph01719\n\n\t- glyph01720\n\n\t- glyph01721\n\n\t- glyph01722\n\n\t- glyph01723\n\n\t- glyph01724\n\n\t- glyph01725\n\n\t- glyph01726\n\n\t- glyph01727\n\n\t- glyph01728\n\n\t- glyph01729\n\n\t- glyph01730\n\n\t- glyph01731\n\n\t- glyph01732\n\n\t- glyph01733\n\n\t- glyph01734\n\n\t- glyph01735\n\n\t- glyph01736\n\n\t- glyph01737\n\n\t- glyph01738\n\n\t- glyph01739\n\n\t- glyph01740\n\n\t- glyph01741\n\n\t- glyph01742\n\n\t- glyph01743\n\n\t- glyph01744\n\n\t- glyph01745\n\n\t- glyph01746\n\n\t- glyph01747\n\n\t- glyph01748\n\n\t- glyph01749\n\n\t- glyph01750\n\n\t- glyph01751\n\n\t- glyph01752\n\n\t- glyph01753\n\n\t- glyph01754\n\n\t- glyph01755\n\n\t- glyph01756\n\n\t- glyph01757\n\n\t- glyph01758\n\n\t- glyph01759\n\n\t- glyph01760\n\n\t- glyph01761\n\n\t- glyph01762\n\n\t- glyph01763\n\n\t- glyph01764\n\n\t- glyph01765\n\n\t- glyph01786\n\n\t- glyph01823\n\n\t- glyph01824\n\n\t- glyph01825\n\n\t- glyph01826\n\n\t- glyph01827\n\n\t- glyph01828\n\n\t- glyph01829\n\n\t- glyph01830\n\n\t- glyph01831\n\n\t- glyph01832\n\n\t- glyph01833\n\n\t- glyph01834\n\n\t- glyph02314\n\n\t- glyph02339\n\n\t- glyph02371\n\n\t- glyph02502\n\n\t- glyph02783\n\n\t- glyph02784\n\n\t- glyph02791\n\n\t- glyph02814\n\n\t- glyph02817\n\n\t- glyph02820\n\n\t- glyph02828\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02837\n\n\t- glyph02842\n\n\t- glyph02860\n\n\t- glyph02866\n\n\t- glyph02871\n\n\t- glyph02874\n\n\t- glyph02877\n\n\t- glyph02883\n\n\t- glyph02889\n\n\t- glyph02893\n\n\t- glyph02896\n\n\t- glyph02900\n\n\t- glyph02903\n\n\t- glyph02905\n\n\t- glyph02908\n\n\t- glyph02911\n\n\t- glyph02914\n\n\t- glyph02917\n\n\t- glyph02920\n\n\t- glyph02923\n\n\t- glyph02926\n\n\t- glyph02929\n\n\t- glyph02932\n\n\t- glyph02936\n\n\t- glyph02939\n\n\t- glyph02942\n\n\t- glyph02945\n\n\t- glyph02948\n\n\t- glyph02951\n\n\t- glyph02953\n\n\t- glyph03007\n\n\t- glyph03010\n\n\t- glyph03013\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni023A\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni04FA\tContours detected: 2\tExpected: 1 or 3\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni023A\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni04FA\tContours detected: 2\tExpected: 1 or 3\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs had components with scaling or rotation\nor inverted outline direction:\n\n* glyph01798 (component glyph00180)\n* glyph01798 (component dotaccent)\n* glyph01798 (component dotaccent)\n* uni034B (component glyph00180)\n* uni034B (component dotaccent)\n* uni034B (component dotaccent)\n [code: transformed-components]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "FAIL" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1190:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "PASS" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00305\n\n\t- glyph00363\n\n\t- glyph00467\n\n\t- glyph00468\n\n\t- glyph00469\n\n\t- glyph00470\n\n\t- glyph00471\n\n\t- glyph00472\n\n\t- glyph00473\n\n\t- glyph00474\n\n\t- glyph00494\n\n\t- glyph00495\n\n\t- glyph00496\n\n\t- glyph00507\n\n\t- glyph00511\n\n\t- glyph00512\n\n\t- glyph00515\n\n\t- glyph00516\n\n\t- glyph00517\n\n\t- glyph00519\n\n\t- glyph00520\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00529\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00533\n\n\t- glyph00534\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00539\n\n\t- glyph00540\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00550\n\n\t- glyph00551\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00556\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00566\n\n\t- glyph00567\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00572\n\n\t- glyph00573\n\n\t- glyph00574\n\n\t- glyph00922\n\n\t- glyph00947\n\n\t- glyph01108\n\n\t- glyph01112\n\n\t- glyph01113\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01152\n\n\t- glyph01162\n\n\t- glyph01174\n\n\t- glyph01198\n\n\t- glyph01233\n\n\t- glyph01237\n\n\t- glyph01238\n\n\t- glyph01246\n\n\t- glyph01247\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01314\n\n\t- glyph01315\n\n\t- glyph01318\n\n\t- glyph01349\n\n\t- glyph01350\n\n\t- glyph01363\n\n\t- glyph01364\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01379\n\n\t- glyph01415\n\n\t- glyph01422\n\n\t- glyph01424\n\n\t- glyph01425\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01441\n\n\t- glyph01461\n\n\t- glyph01462\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01479\n\n\t- glyph01480\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01549\n\n\t- glyph01550\n\n\t- glyph01555\n\n\t- glyph01556\n\n\t- glyph01557\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01571\n\n\t- glyph01572\n\n\t- glyph01573\n\n\t- glyph01574\n\n\t- glyph01575\n\n\t- glyph01576\n\n\t- glyph02084\n\n\t- glyph02110\n\n\t- glyph02143\n\n\t- glyph02276\n\n\t- glyph02557\n\n\t- glyph02558\n\n\t- glyph02564\n\n\t- glyph02587\n\n\t- glyph02590\n\n\t- glyph02593\n\n\t- glyph02601\n\n\t- glyph02605\n\n\t- glyph02606\n\n\t- glyph02610\n\n\t- glyph02615\n\n\t- glyph02627\n\n\t- glyph02635\n\n\t- glyph02641\n\n\t- glyph02646\n\n\t- glyph02649\n\n\t- glyph02652\n\n\t- glyph02658\n\n\t- glyph02664\n\n\t- glyph02668\n\n\t- glyph02671\n\n\t- glyph02675\n\n\t- glyph02678\n\n\t- glyph02680\n\n\t- glyph02683\n\n\t- glyph02686\n\n\t- glyph02689\n\n\t- glyph02692\n\n\t- glyph02695\n\n\t- glyph02698\n\n\t- glyph02701\n\n\t- glyph02704\n\n\t- glyph02707\n\n\t- glyph02711\n\n\t- glyph02714\n\n\t- glyph02717\n\n\t- glyph02720\n\n\t- glyph02723\n\n\t- glyph02726\n\n\t- glyph02728\n\n\t- glyph02782\n\n\t- glyph02785\n\n\t- glyph02788\n\n\t- glyph02794\n\n\t- glyph02805\n\n\t- glyph02806\n\n\t- glyph02807\n\n\t- glyph02808\n\n\t- glyph02810\n\n\t- glyph02811\n\n\t- glyph02812\n\n\t- glyph02813\n\n\t- glyph02814\n\n\t- glyph02815\n\n\t- glyph02816\n\n\t- glyph02817\n\n\t- glyph02818\n\n\t- glyph02820\n\n\t- glyph02821\n\n\t- glyph02822\n\n\t- glyph02823\n\n\t- glyph02824\n\n\t- glyph02825\n\n\t- glyph02826\n\n\t- glyph02827\n\n\t- glyph02828\n\n\t- glyph02829\n\n\t- glyph02830\n\n\t- glyph02831\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02834\n\n\t- glyph02835\n\n\t- glyph02836\n\n\t- glyph02837\n\n\t- glyph02838\n\n\t- glyph02839\n\n\t- glyph02840\n\n\t- glyph02841\n\n\t- glyph02842\n\n\t- glyph02843\n\n\t- glyph02844\n\n\t- glyph02845\n\n\t- glyph02846\n\n\t- glyph02847\n\n\t- glyph02848\n\n\t- glyph02849\n\n\t- glyph02850\n\n\t- glyph02851\n\n\t- glyph02852\n\n\t- glyph02853\n\n\t- glyph02854\n\n\t- glyph02855\n\n\t- glyph02856\n\n\t- glyph02857\n\n\t- glyph02858\n\n\t- glyph02859\n\n\t- glyph02860\n\n\t- glyph02861\n\n\t- glyph02862\n\n\t- glyph02863\n\n\t- glyph02864\n\n\t- glyph02865\n\n\t- glyph02866\n\n\t- glyph02867\n\n\t- glyph02868\n\n\t- glyph02869\n\n\t- glyph02870\n\n\t- glyph02871\n\n\t- glyph02872\n\n\t- glyph02873\n\n\t- glyph02874\n\n\t- glyph02875\n\n\t- glyph02876\n\n\t- glyph02877\n\n\t- glyph02878\n\n\t- glyph02879\n\n\t- glyph02880\n\n\t- glyph02881\n\n\t- glyph02882\n\n\t- glyph02883\n\n\t- glyph02884\n\n\t- glyph02885\n\n\t- glyph02886\n\n\t- glyph02887\n\n\t- glyph02888\n\n\t- glyph02889\n\n\t- glyph02890\n\n\t- glyph02891\n\n\t- glyph02892\n\n\t- glyph02893\n\n\t- glyph02894\n\n\t- glyph02895\n\n\t- glyph02896\n\n\t- glyph02897\n\n\t- glyph02898\n\n\t- glyph02899\n\n\t- glyph02900\n\n\t- glyph02901\n\n\t- glyph02902\n\n\t- glyph02903\n\n\t- glyph02904\n\n\t- glyph02905\n\n\t- glyph02906\n\n\t- glyph02907\n\n\t- glyph02908\n\n\t- glyph02909\n\n\t- glyph02910\n\n\t- glyph02911\n\n\t- glyph02912\n\n\t- glyph02913\n\n\t- glyph02914\n\n\t- glyph02915\n\n\t- glyph02916\n\n\t- glyph02917\n\n\t- glyph02918\n\n\t- glyph02919\n\n\t- glyph02920\n\n\t- glyph02921\n\n\t- glyph02922\n\n\t- glyph02923\n\n\t- glyph02924\n\n\t- glyph02925\n\n\t- glyph02926\n\n\t- glyph02927\n\n\t- glyph02928\n\n\t- glyph02929\n\n\t- glyph02930\n\n\t- glyph02931\n\n\t- glyph02932\n\n\t- glyph02933\n\n\t- glyph02934\n\n\t- glyph02935\n\n\t- glyph02936\n\n\t- glyph02937\n\n\t- glyph02938\n\n\t- glyph02939\n\n\t- glyph02940\n\n\t- glyph02941\n\n\t- glyph02942\n\n\t- glyph02943\n\n\t- glyph02944\n\n\t- glyph02945\n\n\t- glyph02946\n\n\t- glyph02947\n\n\t- glyph02948\n\n\t- glyph02949\n\n\t- glyph02950\n\n\t- glyph02951\n\n\t- glyph02952\n\n\t- glyph02953\n\n\t- glyph02954\n\n\t- glyph02955\n\n\t- glyph02956\n\n\t- glyph02957\n\n\t- glyph02958\n\n\t- glyph02959\n\n\t- glyph03006\n\n\t- glyph03007\n\n\t- glyph03008\n\n\t- glyph03009\n\n\t- glyph03010\n\n\t- glyph03011\n\n\t- glyph03012\n\n\t- glyph03013\n\n\t- glyph03014\n\n\t- glyph03015\n\n\t- glyph03016\n\n\t- glyph03017\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni1E97\tContours detected: 1\tExpected: 3\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni1E97\tContours detected: 1\tExpected: 3\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "No glyphs had components with scaling or rotation", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "PASS" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1220:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "WARN" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00305\n\n\t- glyph00363\n\n\t- glyph00467\n\n\t- glyph00468\n\n\t- glyph00469\n\n\t- glyph00470\n\n\t- glyph00471\n\n\t- glyph00472\n\n\t- glyph00473\n\n\t- glyph00474\n\n\t- glyph00494\n\n\t- glyph00495\n\n\t- glyph00496\n\n\t- glyph00507\n\n\t- glyph00511\n\n\t- glyph00512\n\n\t- glyph00515\n\n\t- glyph00516\n\n\t- glyph00517\n\n\t- glyph00519\n\n\t- glyph00520\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00529\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00533\n\n\t- glyph00534\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00539\n\n\t- glyph00540\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00550\n\n\t- glyph00551\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00556\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00566\n\n\t- glyph00567\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00572\n\n\t- glyph00573\n\n\t- glyph00574\n\n\t- glyph00922\n\n\t- glyph00947\n\n\t- glyph01108\n\n\t- glyph01112\n\n\t- glyph01113\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01152\n\n\t- glyph01162\n\n\t- glyph01174\n\n\t- glyph01198\n\n\t- glyph01233\n\n\t- glyph01237\n\n\t- glyph01238\n\n\t- glyph01246\n\n\t- glyph01247\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01314\n\n\t- glyph01315\n\n\t- glyph01349\n\n\t- glyph01350\n\n\t- glyph01363\n\n\t- glyph01364\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01379\n\n\t- glyph01415\n\n\t- glyph01422\n\n\t- glyph01424\n\n\t- glyph01425\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01441\n\n\t- glyph01461\n\n\t- glyph01462\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01479\n\n\t- glyph01480\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01549\n\n\t- glyph01550\n\n\t- glyph01555\n\n\t- glyph01556\n\n\t- glyph01557\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01571\n\n\t- glyph01572\n\n\t- glyph01573\n\n\t- glyph01574\n\n\t- glyph01575\n\n\t- glyph01576\n\n\t- glyph02084\n\n\t- glyph02110\n\n\t- glyph02143\n\n\t- glyph02276\n\n\t- glyph02557\n\n\t- glyph02558\n\n\t- glyph02564\n\n\t- glyph02587\n\n\t- glyph02590\n\n\t- glyph02593\n\n\t- glyph02601\n\n\t- glyph02605\n\n\t- glyph02606\n\n\t- glyph02610\n\n\t- glyph02615\n\n\t- glyph02627\n\n\t- glyph02635\n\n\t- glyph02641\n\n\t- glyph02646\n\n\t- glyph02649\n\n\t- glyph02652\n\n\t- glyph02658\n\n\t- glyph02664\n\n\t- glyph02668\n\n\t- glyph02671\n\n\t- glyph02675\n\n\t- glyph02678\n\n\t- glyph02680\n\n\t- glyph02683\n\n\t- glyph02686\n\n\t- glyph02689\n\n\t- glyph02692\n\n\t- glyph02695\n\n\t- glyph02698\n\n\t- glyph02701\n\n\t- glyph02704\n\n\t- glyph02707\n\n\t- glyph02711\n\n\t- glyph02714\n\n\t- glyph02717\n\n\t- glyph02720\n\n\t- glyph02723\n\n\t- glyph02726\n\n\t- glyph02728\n\n\t- glyph02782\n\n\t- glyph02785\n\n\t- glyph02788\n\n\t- glyph02794\n\n\t- glyph02805\n\n\t- glyph02806\n\n\t- glyph02807\n\n\t- glyph02808\n\n\t- glyph02810\n\n\t- glyph02811\n\n\t- glyph02812\n\n\t- glyph02813\n\n\t- glyph02814\n\n\t- glyph02815\n\n\t- glyph02816\n\n\t- glyph02817\n\n\t- glyph02818\n\n\t- glyph02820\n\n\t- glyph02821\n\n\t- glyph02822\n\n\t- glyph02823\n\n\t- glyph02824\n\n\t- glyph02825\n\n\t- glyph02826\n\n\t- glyph02827\n\n\t- glyph02828\n\n\t- glyph02829\n\n\t- glyph02830\n\n\t- glyph02831\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02834\n\n\t- glyph02835\n\n\t- glyph02836\n\n\t- glyph02837\n\n\t- glyph02838\n\n\t- glyph02839\n\n\t- glyph02840\n\n\t- glyph02841\n\n\t- glyph02842\n\n\t- glyph02843\n\n\t- glyph02844\n\n\t- glyph02845\n\n\t- glyph02846\n\n\t- glyph02847\n\n\t- glyph02848\n\n\t- glyph02849\n\n\t- glyph02850\n\n\t- glyph02851\n\n\t- glyph02852\n\n\t- glyph02853\n\n\t- glyph02854\n\n\t- glyph02855\n\n\t- glyph02856\n\n\t- glyph02857\n\n\t- glyph02858\n\n\t- glyph02859\n\n\t- glyph02860\n\n\t- glyph02861\n\n\t- glyph02862\n\n\t- glyph02863\n\n\t- glyph02864\n\n\t- glyph02865\n\n\t- glyph02866\n\n\t- glyph02867\n\n\t- glyph02868\n\n\t- glyph02869\n\n\t- glyph02870\n\n\t- glyph02871\n\n\t- glyph02872\n\n\t- glyph02873\n\n\t- glyph02874\n\n\t- glyph02875\n\n\t- glyph02876\n\n\t- glyph02877\n\n\t- glyph02878\n\n\t- glyph02879\n\n\t- glyph02880\n\n\t- glyph02881\n\n\t- glyph02882\n\n\t- glyph02883\n\n\t- glyph02884\n\n\t- glyph02885\n\n\t- glyph02886\n\n\t- glyph02887\n\n\t- glyph02888\n\n\t- glyph02889\n\n\t- glyph02890\n\n\t- glyph02891\n\n\t- glyph02892\n\n\t- glyph02893\n\n\t- glyph02894\n\n\t- glyph02895\n\n\t- glyph02896\n\n\t- glyph02897\n\n\t- glyph02898\n\n\t- glyph02899\n\n\t- glyph02900\n\n\t- glyph02901\n\n\t- glyph02902\n\n\t- glyph02903\n\n\t- glyph02904\n\n\t- glyph02905\n\n\t- glyph02906\n\n\t- glyph02907\n\n\t- glyph02908\n\n\t- glyph02909\n\n\t- glyph02910\n\n\t- glyph02911\n\n\t- glyph02912\n\n\t- glyph02913\n\n\t- glyph02914\n\n\t- glyph02915\n\n\t- glyph02916\n\n\t- glyph02917\n\n\t- glyph02918\n\n\t- glyph02919\n\n\t- glyph02920\n\n\t- glyph02921\n\n\t- glyph02922\n\n\t- glyph02923\n\n\t- glyph02924\n\n\t- glyph02925\n\n\t- glyph02926\n\n\t- glyph02927\n\n\t- glyph02928\n\n\t- glyph02929\n\n\t- glyph02930\n\n\t- glyph02931\n\n\t- glyph02932\n\n\t- glyph02933\n\n\t- glyph02934\n\n\t- glyph02935\n\n\t- glyph02936\n\n\t- glyph02937\n\n\t- glyph02938\n\n\t- glyph02939\n\n\t- glyph02940\n\n\t- glyph02941\n\n\t- glyph02942\n\n\t- glyph02943\n\n\t- glyph02944\n\n\t- glyph02945\n\n\t- glyph02946\n\n\t- glyph02947\n\n\t- glyph02948\n\n\t- glyph02949\n\n\t- glyph02950\n\n\t- glyph02951\n\n\t- glyph02952\n\n\t- glyph02953\n\n\t- glyph02954\n\n\t- glyph02955\n\n\t- glyph02956\n\n\t- glyph02957\n\n\t- glyph02958\n\n\t- glyph02959\n\n\t- glyph03006\n\n\t- glyph03007\n\n\t- glyph03008\n\n\t- glyph03009\n\n\t- glyph03010\n\n\t- glyph03011\n\n\t- glyph03012\n\n\t- glyph03013\n\n\t- glyph03014\n\n\t- glyph03015\n\n\t- glyph03016\n\n\t- glyph03017\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: onehalf\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni0246\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni0247\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni1E97\tContours detected: 1\tExpected: 3\n\n\t- Glyph name: onethird\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: twothirds\tContours detected: 2\tExpected: 1 or 3\n\n\t- Glyph name: uni2155\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni2156\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: uni2159\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: oneeighth\tContours detected: 4\tExpected: 5\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: oneeighth\tContours detected: 4\tExpected: 5\n\n\t- Glyph name: onehalf\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: onethird\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: twothirds\tContours detected: 2\tExpected: 1 or 3\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni0246\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni0247\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni1E97\tContours detected: 1\tExpected: 3\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "No glyphs had components with scaling or rotation", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "PASS" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1199:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "WARN" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00306\n\n\t- glyph00365\n\n\t- glyph00469\n\n\t- glyph00471\n\n\t- glyph00473\n\n\t- glyph00475\n\n\t- glyph00496\n\n\t- glyph00497\n\n\t- glyph00498\n\n\t- glyph00509\n\n\t- glyph00513\n\n\t- glyph00514\n\n\t- glyph00517\n\n\t- glyph00518\n\n\t- glyph00519\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00525\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00532\n\n\t- glyph00533\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00538\n\n\t- glyph00539\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00549\n\n\t- glyph00550\n\n\t- glyph00552\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00565\n\n\t- glyph00566\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00571\n\n\t- glyph00572\n\n\t- glyph00574\n\n\t- glyph00575\n\n\t- glyph00576\n\n\t- glyph00924\n\n\t- glyph00949\n\n\t- glyph01110\n\n\t- glyph01112\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01116\n\n\t- glyph01117\n\n\t- glyph01154\n\n\t- glyph01164\n\n\t- glyph01176\n\n\t- glyph01200\n\n\t- glyph01235\n\n\t- glyph01239\n\n\t- glyph01240\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01255\n\n\t- glyph01256\n\n\t- glyph01316\n\n\t- glyph01317\n\n\t- glyph01351\n\n\t- glyph01352\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01367\n\n\t- glyph01368\n\n\t- glyph01381\n\n\t- glyph01417\n\n\t- glyph01423\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01438\n\n\t- glyph01439\n\n\t- glyph01443\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01468\n\n\t- glyph01469\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01483\n\n\t- glyph01484\n\n\t- glyph01551\n\n\t- glyph01552\n\n\t- glyph01560\n\n\t- glyph01562\n\n\t- glyph01564\n\n\t- glyph01565\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01569\n\n\t- glyph01600\n\n\t- glyph01611\n\n\t- glyph01612\n\n\t- glyph01613\n\n\t- glyph01614\n\n\t- glyph01616\n\n\t- glyph01617\n\n\t- glyph01618\n\n\t- glyph01619\n\n\t- glyph01620\n\n\t- glyph01621\n\n\t- glyph01622\n\n\t- glyph01623\n\n\t- glyph01624\n\n\t- glyph01626\n\n\t- glyph01627\n\n\t- glyph01628\n\n\t- glyph01629\n\n\t- glyph01630\n\n\t- glyph01631\n\n\t- glyph01632\n\n\t- glyph01633\n\n\t- glyph01634\n\n\t- glyph01635\n\n\t- glyph01636\n\n\t- glyph01637\n\n\t- glyph01638\n\n\t- glyph01639\n\n\t- glyph01640\n\n\t- glyph01641\n\n\t- glyph01642\n\n\t- glyph01643\n\n\t- glyph01644\n\n\t- glyph01645\n\n\t- glyph01646\n\n\t- glyph01647\n\n\t- glyph01648\n\n\t- glyph01649\n\n\t- glyph01650\n\n\t- glyph01651\n\n\t- glyph01652\n\n\t- glyph01653\n\n\t- glyph01654\n\n\t- glyph01655\n\n\t- glyph01656\n\n\t- glyph01657\n\n\t- glyph01658\n\n\t- glyph01659\n\n\t- glyph01660\n\n\t- glyph01661\n\n\t- glyph01662\n\n\t- glyph01663\n\n\t- glyph01664\n\n\t- glyph01665\n\n\t- glyph01666\n\n\t- glyph01667\n\n\t- glyph01668\n\n\t- glyph01669\n\n\t- glyph01670\n\n\t- glyph01671\n\n\t- glyph01672\n\n\t- glyph01673\n\n\t- glyph01674\n\n\t- glyph01675\n\n\t- glyph01676\n\n\t- glyph01677\n\n\t- glyph01678\n\n\t- glyph01679\n\n\t- glyph01680\n\n\t- glyph01681\n\n\t- glyph01682\n\n\t- glyph01683\n\n\t- glyph01684\n\n\t- glyph01685\n\n\t- glyph01686\n\n\t- glyph01687\n\n\t- glyph01688\n\n\t- glyph01689\n\n\t- glyph01690\n\n\t- glyph01691\n\n\t- glyph01692\n\n\t- glyph01693\n\n\t- glyph01694\n\n\t- glyph01695\n\n\t- glyph01696\n\n\t- glyph01697\n\n\t- glyph01698\n\n\t- glyph01699\n\n\t- glyph01700\n\n\t- glyph01701\n\n\t- glyph01702\n\n\t- glyph01703\n\n\t- glyph01704\n\n\t- glyph01705\n\n\t- glyph01706\n\n\t- glyph01707\n\n\t- glyph01708\n\n\t- glyph01709\n\n\t- glyph01710\n\n\t- glyph01711\n\n\t- glyph01712\n\n\t- glyph01713\n\n\t- glyph01714\n\n\t- glyph01715\n\n\t- glyph01716\n\n\t- glyph01717\n\n\t- glyph01718\n\n\t- glyph01719\n\n\t- glyph01720\n\n\t- glyph01721\n\n\t- glyph01722\n\n\t- glyph01723\n\n\t- glyph01724\n\n\t- glyph01725\n\n\t- glyph01726\n\n\t- glyph01727\n\n\t- glyph01728\n\n\t- glyph01729\n\n\t- glyph01730\n\n\t- glyph01731\n\n\t- glyph01732\n\n\t- glyph01733\n\n\t- glyph01734\n\n\t- glyph01735\n\n\t- glyph01736\n\n\t- glyph01737\n\n\t- glyph01738\n\n\t- glyph01739\n\n\t- glyph01740\n\n\t- glyph01741\n\n\t- glyph01742\n\n\t- glyph01743\n\n\t- glyph01744\n\n\t- glyph01745\n\n\t- glyph01746\n\n\t- glyph01747\n\n\t- glyph01748\n\n\t- glyph01749\n\n\t- glyph01750\n\n\t- glyph01751\n\n\t- glyph01752\n\n\t- glyph01753\n\n\t- glyph01754\n\n\t- glyph01755\n\n\t- glyph01756\n\n\t- glyph01757\n\n\t- glyph01758\n\n\t- glyph01759\n\n\t- glyph01760\n\n\t- glyph01761\n\n\t- glyph01762\n\n\t- glyph01763\n\n\t- glyph01764\n\n\t- glyph01765\n\n\t- glyph01786\n\n\t- glyph01823\n\n\t- glyph01824\n\n\t- glyph01825\n\n\t- glyph01826\n\n\t- glyph01827\n\n\t- glyph01828\n\n\t- glyph01829\n\n\t- glyph01830\n\n\t- glyph01831\n\n\t- glyph01832\n\n\t- glyph01833\n\n\t- glyph01834\n\n\t- glyph02314\n\n\t- glyph02339\n\n\t- glyph02371\n\n\t- glyph02502\n\n\t- glyph02783\n\n\t- glyph02784\n\n\t- glyph02791\n\n\t- glyph02814\n\n\t- glyph02817\n\n\t- glyph02820\n\n\t- glyph02828\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02837\n\n\t- glyph02842\n\n\t- glyph02860\n\n\t- glyph02866\n\n\t- glyph02871\n\n\t- glyph02874\n\n\t- glyph02877\n\n\t- glyph02883\n\n\t- glyph02889\n\n\t- glyph02893\n\n\t- glyph02896\n\n\t- glyph02900\n\n\t- glyph02903\n\n\t- glyph02905\n\n\t- glyph02908\n\n\t- glyph02911\n\n\t- glyph02914\n\n\t- glyph02917\n\n\t- glyph02920\n\n\t- glyph02923\n\n\t- glyph02926\n\n\t- glyph02929\n\n\t- glyph02932\n\n\t- glyph02936\n\n\t- glyph02939\n\n\t- glyph02942\n\n\t- glyph02945\n\n\t- glyph02948\n\n\t- glyph02951\n\n\t- glyph02953\n\n\t- glyph03007\n\n\t- glyph03010\n\n\t- glyph03013\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni0246\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni0449\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni0246\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni0449\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "No glyphs had components with scaling or rotation", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "PASS" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1229:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "PASS" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00189\n\n\t- glyph00305\n\n\t- glyph00363\n\n\t- glyph00467\n\n\t- glyph00469\n\n\t- glyph00471\n\n\t- glyph00473\n\n\t- glyph00476\n\n\t- glyph00478\n\n\t- glyph00480\n\n\t- glyph00482\n\n\t- glyph00494\n\n\t- glyph00495\n\n\t- glyph00496\n\n\t- glyph00507\n\n\t- glyph00511\n\n\t- glyph00512\n\n\t- glyph00515\n\n\t- glyph00516\n\n\t- glyph00517\n\n\t- glyph00519\n\n\t- glyph00520\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00529\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00533\n\n\t- glyph00534\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00539\n\n\t- glyph00540\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00550\n\n\t- glyph00551\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00556\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00566\n\n\t- glyph00567\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00572\n\n\t- glyph00573\n\n\t- glyph00574\n\n\t- glyph00922\n\n\t- glyph00947\n\n\t- glyph01108\n\n\t- glyph01110\n\n\t- glyph01112\n\n\t- glyph01113\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01152\n\n\t- glyph01162\n\n\t- glyph01174\n\n\t- glyph01198\n\n\t- glyph01233\n\n\t- glyph01237\n\n\t- glyph01238\n\n\t- glyph01246\n\n\t- glyph01247\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01314\n\n\t- glyph01315\n\n\t- glyph01349\n\n\t- glyph01350\n\n\t- glyph01363\n\n\t- glyph01364\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01379\n\n\t- glyph01415\n\n\t- glyph01421\n\n\t- glyph01424\n\n\t- glyph01425\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01441\n\n\t- glyph01461\n\n\t- glyph01462\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01479\n\n\t- glyph01480\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01549\n\n\t- glyph01550\n\n\t- glyph01555\n\n\t- glyph01556\n\n\t- glyph01557\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01571\n\n\t- glyph01572\n\n\t- glyph01573\n\n\t- glyph01574\n\n\t- glyph01575\n\n\t- glyph01576\n\n\t- glyph02084\n\n\t- glyph02110\n\n\t- glyph02143\n\n\t- glyph02276\n\n\t- glyph02557\n\n\t- glyph02558\n\n\t- glyph02564\n\n\t- glyph02587\n\n\t- glyph02590\n\n\t- glyph02593\n\n\t- glyph02601\n\n\t- glyph02605\n\n\t- glyph02606\n\n\t- glyph02610\n\n\t- glyph02615\n\n\t- glyph02627\n\n\t- glyph02635\n\n\t- glyph02641\n\n\t- glyph02646\n\n\t- glyph02649\n\n\t- glyph02652\n\n\t- glyph02658\n\n\t- glyph02664\n\n\t- glyph02668\n\n\t- glyph02671\n\n\t- glyph02675\n\n\t- glyph02678\n\n\t- glyph02680\n\n\t- glyph02683\n\n\t- glyph02686\n\n\t- glyph02689\n\n\t- glyph02692\n\n\t- glyph02695\n\n\t- glyph02698\n\n\t- glyph02701\n\n\t- glyph02704\n\n\t- glyph02707\n\n\t- glyph02711\n\n\t- glyph02714\n\n\t- glyph02717\n\n\t- glyph02720\n\n\t- glyph02723\n\n\t- glyph02726\n\n\t- glyph02728\n\n\t- glyph02782\n\n\t- glyph02785\n\n\t- glyph02788\n\n\t- glyph02794\n\n\t- glyph02805\n\n\t- glyph02806\n\n\t- glyph02807\n\n\t- glyph02808\n\n\t- glyph02810\n\n\t- glyph02811\n\n\t- glyph02812\n\n\t- glyph02813\n\n\t- glyph02814\n\n\t- glyph02815\n\n\t- glyph02816\n\n\t- glyph02817\n\n\t- glyph02818\n\n\t- glyph02820\n\n\t- glyph02821\n\n\t- glyph02822\n\n\t- glyph02823\n\n\t- glyph02824\n\n\t- glyph02825\n\n\t- glyph02826\n\n\t- glyph02827\n\n\t- glyph02828\n\n\t- glyph02829\n\n\t- glyph02830\n\n\t- glyph02831\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02834\n\n\t- glyph02835\n\n\t- glyph02836\n\n\t- glyph02837\n\n\t- glyph02838\n\n\t- glyph02839\n\n\t- glyph02840\n\n\t- glyph02841\n\n\t- glyph02842\n\n\t- glyph02843\n\n\t- glyph02844\n\n\t- glyph02845\n\n\t- glyph02846\n\n\t- glyph02847\n\n\t- glyph02848\n\n\t- glyph02849\n\n\t- glyph02850\n\n\t- glyph02851\n\n\t- glyph02852\n\n\t- glyph02853\n\n\t- glyph02854\n\n\t- glyph02855\n\n\t- glyph02856\n\n\t- glyph02857\n\n\t- glyph02858\n\n\t- glyph02859\n\n\t- glyph02860\n\n\t- glyph02861\n\n\t- glyph02862\n\n\t- glyph02863\n\n\t- glyph02864\n\n\t- glyph02865\n\n\t- glyph02866\n\n\t- glyph02867\n\n\t- glyph02868\n\n\t- glyph02869\n\n\t- glyph02870\n\n\t- glyph02871\n\n\t- glyph02872\n\n\t- glyph02873\n\n\t- glyph02874\n\n\t- glyph02875\n\n\t- glyph02876\n\n\t- glyph02877\n\n\t- glyph02878\n\n\t- glyph02879\n\n\t- glyph02880\n\n\t- glyph02881\n\n\t- glyph02882\n\n\t- glyph02883\n\n\t- glyph02884\n\n\t- glyph02885\n\n\t- glyph02886\n\n\t- glyph02887\n\n\t- glyph02888\n\n\t- glyph02889\n\n\t- glyph02890\n\n\t- glyph02891\n\n\t- glyph02892\n\n\t- glyph02893\n\n\t- glyph02894\n\n\t- glyph02895\n\n\t- glyph02896\n\n\t- glyph02897\n\n\t- glyph02898\n\n\t- glyph02899\n\n\t- glyph02900\n\n\t- glyph02901\n\n\t- glyph02902\n\n\t- glyph02903\n\n\t- glyph02904\n\n\t- glyph02905\n\n\t- glyph02906\n\n\t- glyph02907\n\n\t- glyph02908\n\n\t- glyph02909\n\n\t- glyph02910\n\n\t- glyph02911\n\n\t- glyph02912\n\n\t- glyph02913\n\n\t- glyph02914\n\n\t- glyph02915\n\n\t- glyph02916\n\n\t- glyph02917\n\n\t- glyph02918\n\n\t- glyph02919\n\n\t- glyph02920\n\n\t- glyph02921\n\n\t- glyph02922\n\n\t- glyph02923\n\n\t- glyph02924\n\n\t- glyph02925\n\n\t- glyph02926\n\n\t- glyph02927\n\n\t- glyph02928\n\n\t- glyph02929\n\n\t- glyph02930\n\n\t- glyph02931\n\n\t- glyph02932\n\n\t- glyph02933\n\n\t- glyph02934\n\n\t- glyph02935\n\n\t- glyph02936\n\n\t- glyph02937\n\n\t- glyph02938\n\n\t- glyph02939\n\n\t- glyph02940\n\n\t- glyph02941\n\n\t- glyph02942\n\n\t- glyph02943\n\n\t- glyph02944\n\n\t- glyph02945\n\n\t- glyph02946\n\n\t- glyph02947\n\n\t- glyph02948\n\n\t- glyph02949\n\n\t- glyph02950\n\n\t- glyph02951\n\n\t- glyph02952\n\n\t- glyph02953\n\n\t- glyph02954\n\n\t- glyph02955\n\n\t- glyph02956\n\n\t- glyph02957\n\n\t- glyph02958\n\n\t- glyph02959\n\n\t- glyph03006\n\n\t- glyph03007\n\n\t- glyph03008\n\n\t- glyph03009\n\n\t- glyph03010\n\n\t- glyph03011\n\n\t- glyph03012\n\n\t- glyph03013\n\n\t- glyph03014\n\n\t- glyph03015\n\n\t- glyph03016\n\n\t- glyph03017\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni042E\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni042E\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "No glyphs had components with scaling or rotation", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "PASS" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1261:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "WARN" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00306\n\n\t- glyph00365\n\n\t- glyph00469\n\n\t- glyph00471\n\n\t- glyph00473\n\n\t- glyph00475\n\n\t- glyph00496\n\n\t- glyph00497\n\n\t- glyph00498\n\n\t- glyph00509\n\n\t- glyph00513\n\n\t- glyph00514\n\n\t- glyph00517\n\n\t- glyph00518\n\n\t- glyph00519\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00525\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00532\n\n\t- glyph00533\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00538\n\n\t- glyph00539\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00549\n\n\t- glyph00550\n\n\t- glyph00552\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00565\n\n\t- glyph00566\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00571\n\n\t- glyph00572\n\n\t- glyph00574\n\n\t- glyph00575\n\n\t- glyph00576\n\n\t- glyph00924\n\n\t- glyph00949\n\n\t- glyph01110\n\n\t- glyph01112\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01116\n\n\t- glyph01117\n\n\t- glyph01154\n\n\t- glyph01164\n\n\t- glyph01176\n\n\t- glyph01200\n\n\t- glyph01235\n\n\t- glyph01239\n\n\t- glyph01240\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01255\n\n\t- glyph01256\n\n\t- glyph01316\n\n\t- glyph01317\n\n\t- glyph01351\n\n\t- glyph01352\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01367\n\n\t- glyph01368\n\n\t- glyph01381\n\n\t- glyph01417\n\n\t- glyph01423\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01438\n\n\t- glyph01439\n\n\t- glyph01443\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01468\n\n\t- glyph01469\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01483\n\n\t- glyph01484\n\n\t- glyph01551\n\n\t- glyph01552\n\n\t- glyph01560\n\n\t- glyph01562\n\n\t- glyph01564\n\n\t- glyph01565\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01569\n\n\t- glyph01600\n\n\t- glyph01611\n\n\t- glyph01612\n\n\t- glyph01613\n\n\t- glyph01614\n\n\t- glyph01616\n\n\t- glyph01617\n\n\t- glyph01618\n\n\t- glyph01619\n\n\t- glyph01620\n\n\t- glyph01621\n\n\t- glyph01622\n\n\t- glyph01623\n\n\t- glyph01624\n\n\t- glyph01626\n\n\t- glyph01627\n\n\t- glyph01628\n\n\t- glyph01629\n\n\t- glyph01630\n\n\t- glyph01631\n\n\t- glyph01632\n\n\t- glyph01633\n\n\t- glyph01634\n\n\t- glyph01635\n\n\t- glyph01636\n\n\t- glyph01637\n\n\t- glyph01638\n\n\t- glyph01639\n\n\t- glyph01640\n\n\t- glyph01641\n\n\t- glyph01642\n\n\t- glyph01643\n\n\t- glyph01644\n\n\t- glyph01645\n\n\t- glyph01646\n\n\t- glyph01647\n\n\t- glyph01648\n\n\t- glyph01649\n\n\t- glyph01650\n\n\t- glyph01651\n\n\t- glyph01652\n\n\t- glyph01653\n\n\t- glyph01654\n\n\t- glyph01655\n\n\t- glyph01656\n\n\t- glyph01657\n\n\t- glyph01658\n\n\t- glyph01659\n\n\t- glyph01660\n\n\t- glyph01661\n\n\t- glyph01662\n\n\t- glyph01663\n\n\t- glyph01664\n\n\t- glyph01665\n\n\t- glyph01666\n\n\t- glyph01667\n\n\t- glyph01668\n\n\t- glyph01669\n\n\t- glyph01670\n\n\t- glyph01671\n\n\t- glyph01672\n\n\t- glyph01673\n\n\t- glyph01674\n\n\t- glyph01675\n\n\t- glyph01676\n\n\t- glyph01677\n\n\t- glyph01678\n\n\t- glyph01679\n\n\t- glyph01680\n\n\t- glyph01681\n\n\t- glyph01682\n\n\t- glyph01683\n\n\t- glyph01684\n\n\t- glyph01685\n\n\t- glyph01686\n\n\t- glyph01687\n\n\t- glyph01688\n\n\t- glyph01689\n\n\t- glyph01690\n\n\t- glyph01691\n\n\t- glyph01692\n\n\t- glyph01693\n\n\t- glyph01694\n\n\t- glyph01695\n\n\t- glyph01696\n\n\t- glyph01697\n\n\t- glyph01698\n\n\t- glyph01699\n\n\t- glyph01700\n\n\t- glyph01701\n\n\t- glyph01702\n\n\t- glyph01703\n\n\t- glyph01704\n\n\t- glyph01705\n\n\t- glyph01706\n\n\t- glyph01707\n\n\t- glyph01708\n\n\t- glyph01709\n\n\t- glyph01710\n\n\t- glyph01711\n\n\t- glyph01712\n\n\t- glyph01713\n\n\t- glyph01714\n\n\t- glyph01715\n\n\t- glyph01716\n\n\t- glyph01717\n\n\t- glyph01718\n\n\t- glyph01719\n\n\t- glyph01720\n\n\t- glyph01721\n\n\t- glyph01722\n\n\t- glyph01723\n\n\t- glyph01724\n\n\t- glyph01725\n\n\t- glyph01726\n\n\t- glyph01727\n\n\t- glyph01728\n\n\t- glyph01729\n\n\t- glyph01730\n\n\t- glyph01731\n\n\t- glyph01732\n\n\t- glyph01733\n\n\t- glyph01734\n\n\t- glyph01735\n\n\t- glyph01736\n\n\t- glyph01737\n\n\t- glyph01738\n\n\t- glyph01739\n\n\t- glyph01740\n\n\t- glyph01741\n\n\t- glyph01742\n\n\t- glyph01743\n\n\t- glyph01744\n\n\t- glyph01745\n\n\t- glyph01746\n\n\t- glyph01747\n\n\t- glyph01748\n\n\t- glyph01749\n\n\t- glyph01750\n\n\t- glyph01751\n\n\t- glyph01752\n\n\t- glyph01753\n\n\t- glyph01754\n\n\t- glyph01755\n\n\t- glyph01756\n\n\t- glyph01757\n\n\t- glyph01758\n\n\t- glyph01759\n\n\t- glyph01760\n\n\t- glyph01761\n\n\t- glyph01762\n\n\t- glyph01763\n\n\t- glyph01764\n\n\t- glyph01765\n\n\t- glyph01786\n\n\t- glyph01823\n\n\t- glyph01824\n\n\t- glyph01825\n\n\t- glyph01826\n\n\t- glyph01827\n\n\t- glyph01828\n\n\t- glyph01829\n\n\t- glyph01830\n\n\t- glyph01831\n\n\t- glyph01832\n\n\t- glyph01833\n\n\t- glyph01834\n\n\t- glyph02314\n\n\t- glyph02339\n\n\t- glyph02371\n\n\t- glyph02502\n\n\t- glyph02783\n\n\t- glyph02784\n\n\t- glyph02791\n\n\t- glyph02814\n\n\t- glyph02817\n\n\t- glyph02820\n\n\t- glyph02828\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02837\n\n\t- glyph02842\n\n\t- glyph02860\n\n\t- glyph02866\n\n\t- glyph02871\n\n\t- glyph02874\n\n\t- glyph02877\n\n\t- glyph02883\n\n\t- glyph02889\n\n\t- glyph02893\n\n\t- glyph02896\n\n\t- glyph02900\n\n\t- glyph02903\n\n\t- glyph02905\n\n\t- glyph02908\n\n\t- glyph02911\n\n\t- glyph02914\n\n\t- glyph02917\n\n\t- glyph02920\n\n\t- glyph02923\n\n\t- glyph02926\n\n\t- glyph02929\n\n\t- glyph02932\n\n\t- glyph02936\n\n\t- glyph02939\n\n\t- glyph02942\n\n\t- glyph02945\n\n\t- glyph02948\n\n\t- glyph02951\n\n\t- glyph02953\n\n\t- glyph03007\n\n\t- glyph03010\n\n\t- glyph03013\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni0246\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni0449\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni04FA\tContours detected: 2\tExpected: 1 or 3\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni0246\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni0449\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni04FA\tContours detected: 2\tExpected: 1 or 3\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs had components with scaling or rotation\nor inverted outline direction:\n\n* glyph01798 (component glyph00180)\n* glyph01798 (component dotaccent)\n* glyph01798 (component dotaccent)\n* uni034B (component glyph00180)\n* uni034B (component dotaccent)\n* uni034B (component dotaccent)\n [code: transformed-components]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "FAIL" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1222:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "PASS" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00305\n\n\t- glyph00363\n\n\t- glyph00494\n\n\t- glyph00495\n\n\t- glyph00496\n\n\t- glyph00507\n\n\t- glyph00511\n\n\t- glyph00512\n\n\t- glyph00515\n\n\t- glyph00516\n\n\t- glyph00517\n\n\t- glyph00519\n\n\t- glyph00520\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00529\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00533\n\n\t- glyph00534\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00539\n\n\t- glyph00540\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00550\n\n\t- glyph00551\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00556\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00566\n\n\t- glyph00567\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00572\n\n\t- glyph00573\n\n\t- glyph00574\n\n\t- glyph00922\n\n\t- glyph00947\n\n\t- glyph01108\n\n\t- glyph01110\n\n\t- glyph01112\n\n\t- glyph01113\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01152\n\n\t- glyph01162\n\n\t- glyph01174\n\n\t- glyph01198\n\n\t- glyph01233\n\n\t- glyph01237\n\n\t- glyph01238\n\n\t- glyph01246\n\n\t- glyph01247\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01314\n\n\t- glyph01315\n\n\t- glyph01323\n\n\t- glyph01349\n\n\t- glyph01350\n\n\t- glyph01363\n\n\t- glyph01364\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01379\n\n\t- glyph01415\n\n\t- glyph01421\n\n\t- glyph01424\n\n\t- glyph01425\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01441\n\n\t- glyph01461\n\n\t- glyph01462\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01479\n\n\t- glyph01480\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01549\n\n\t- glyph01550\n\n\t- glyph01556\n\n\t- glyph01557\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01571\n\n\t- glyph01572\n\n\t- glyph01573\n\n\t- glyph01574\n\n\t- glyph01575\n\n\t- glyph01576\n\n\t- glyph02084\n\n\t- glyph02110\n\n\t- glyph02143\n\n\t- glyph02276\n\n\t- glyph02557\n\n\t- glyph02558\n\n\t- glyph02564\n\n\t- glyph02587\n\n\t- glyph02590\n\n\t- glyph02593\n\n\t- glyph02601\n\n\t- glyph02605\n\n\t- glyph02606\n\n\t- glyph02610\n\n\t- glyph02615\n\n\t- glyph02627\n\n\t- glyph02635\n\n\t- glyph02641\n\n\t- glyph02646\n\n\t- glyph02649\n\n\t- glyph02652\n\n\t- glyph02658\n\n\t- glyph02664\n\n\t- glyph02668\n\n\t- glyph02671\n\n\t- glyph02675\n\n\t- glyph02678\n\n\t- glyph02680\n\n\t- glyph02683\n\n\t- glyph02686\n\n\t- glyph02689\n\n\t- glyph02692\n\n\t- glyph02695\n\n\t- glyph02698\n\n\t- glyph02701\n\n\t- glyph02704\n\n\t- glyph02707\n\n\t- glyph02711\n\n\t- glyph02714\n\n\t- glyph02717\n\n\t- glyph02720\n\n\t- glyph02723\n\n\t- glyph02726\n\n\t- glyph02728\n\n\t- glyph02782\n\n\t- glyph02785\n\n\t- glyph02788\n\n\t- glyph02794\n\n\t- glyph02805\n\n\t- glyph02806\n\n\t- glyph02807\n\n\t- glyph02808\n\n\t- glyph02810\n\n\t- glyph02811\n\n\t- glyph02812\n\n\t- glyph02813\n\n\t- glyph02814\n\n\t- glyph02815\n\n\t- glyph02816\n\n\t- glyph02817\n\n\t- glyph02818\n\n\t- glyph02820\n\n\t- glyph02821\n\n\t- glyph02822\n\n\t- glyph02823\n\n\t- glyph02824\n\n\t- glyph02825\n\n\t- glyph02826\n\n\t- glyph02827\n\n\t- glyph02828\n\n\t- glyph02829\n\n\t- glyph02830\n\n\t- glyph02831\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02834\n\n\t- glyph02835\n\n\t- glyph02836\n\n\t- glyph02837\n\n\t- glyph02838\n\n\t- glyph02839\n\n\t- glyph02840\n\n\t- glyph02841\n\n\t- glyph02842\n\n\t- glyph02843\n\n\t- glyph02844\n\n\t- glyph02845\n\n\t- glyph02846\n\n\t- glyph02847\n\n\t- glyph02848\n\n\t- glyph02849\n\n\t- glyph02850\n\n\t- glyph02851\n\n\t- glyph02852\n\n\t- glyph02853\n\n\t- glyph02854\n\n\t- glyph02855\n\n\t- glyph02856\n\n\t- glyph02857\n\n\t- glyph02858\n\n\t- glyph02859\n\n\t- glyph02860\n\n\t- glyph02861\n\n\t- glyph02862\n\n\t- glyph02863\n\n\t- glyph02864\n\n\t- glyph02865\n\n\t- glyph02866\n\n\t- glyph02867\n\n\t- glyph02868\n\n\t- glyph02869\n\n\t- glyph02870\n\n\t- glyph02871\n\n\t- glyph02872\n\n\t- glyph02873\n\n\t- glyph02874\n\n\t- glyph02875\n\n\t- glyph02876\n\n\t- glyph02877\n\n\t- glyph02878\n\n\t- glyph02879\n\n\t- glyph02880\n\n\t- glyph02881\n\n\t- glyph02882\n\n\t- glyph02883\n\n\t- glyph02884\n\n\t- glyph02885\n\n\t- glyph02886\n\n\t- glyph02887\n\n\t- glyph02888\n\n\t- glyph02889\n\n\t- glyph02890\n\n\t- glyph02891\n\n\t- glyph02892\n\n\t- glyph02893\n\n\t- glyph02894\n\n\t- glyph02895\n\n\t- glyph02896\n\n\t- glyph02897\n\n\t- glyph02898\n\n\t- glyph02899\n\n\t- glyph02900\n\n\t- glyph02901\n\n\t- glyph02902\n\n\t- glyph02903\n\n\t- glyph02904\n\n\t- glyph02905\n\n\t- glyph02906\n\n\t- glyph02907\n\n\t- glyph02908\n\n\t- glyph02909\n\n\t- glyph02910\n\n\t- glyph02911\n\n\t- glyph02912\n\n\t- glyph02913\n\n\t- glyph02914\n\n\t- glyph02915\n\n\t- glyph02916\n\n\t- glyph02917\n\n\t- glyph02918\n\n\t- glyph02919\n\n\t- glyph02920\n\n\t- glyph02921\n\n\t- glyph02922\n\n\t- glyph02923\n\n\t- glyph02924\n\n\t- glyph02925\n\n\t- glyph02926\n\n\t- glyph02927\n\n\t- glyph02928\n\n\t- glyph02929\n\n\t- glyph02930\n\n\t- glyph02931\n\n\t- glyph02932\n\n\t- glyph02933\n\n\t- glyph02934\n\n\t- glyph02935\n\n\t- glyph02936\n\n\t- glyph02937\n\n\t- glyph02938\n\n\t- glyph02939\n\n\t- glyph02940\n\n\t- glyph02941\n\n\t- glyph02942\n\n\t- glyph02943\n\n\t- glyph02944\n\n\t- glyph02945\n\n\t- glyph02946\n\n\t- glyph02947\n\n\t- glyph02948\n\n\t- glyph02949\n\n\t- glyph02950\n\n\t- glyph02951\n\n\t- glyph02952\n\n\t- glyph02953\n\n\t- glyph02954\n\n\t- glyph02955\n\n\t- glyph02956\n\n\t- glyph02957\n\n\t- glyph02958\n\n\t- glyph02959\n\n\t- glyph03006\n\n\t- glyph03007\n\n\t- glyph03008\n\n\t- glyph03009\n\n\t- glyph03010\n\n\t- glyph03011\n\n\t- glyph03012\n\n\t- glyph03013\n\n\t- glyph03014\n\n\t- glyph03015\n\n\t- glyph03016\n\n\t- glyph03017\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni0246\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni0247\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni1E97\tContours detected: 1\tExpected: 3\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni0246\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni0247\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni1E97\tContours detected: 1\tExpected: 3\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "No glyphs had components with scaling or rotation", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "PASS" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1206:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "WARN" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00306\n\n\t- glyph00365\n\n\t- glyph00496\n\n\t- glyph00497\n\n\t- glyph00498\n\n\t- glyph00509\n\n\t- glyph00513\n\n\t- glyph00514\n\n\t- glyph00517\n\n\t- glyph00518\n\n\t- glyph00519\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00525\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00532\n\n\t- glyph00533\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00538\n\n\t- glyph00539\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00549\n\n\t- glyph00550\n\n\t- glyph00552\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00565\n\n\t- glyph00566\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00571\n\n\t- glyph00572\n\n\t- glyph00574\n\n\t- glyph00575\n\n\t- glyph00576\n\n\t- glyph00924\n\n\t- glyph00949\n\n\t- glyph01110\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01116\n\n\t- glyph01117\n\n\t- glyph01154\n\n\t- glyph01164\n\n\t- glyph01176\n\n\t- glyph01200\n\n\t- glyph01235\n\n\t- glyph01239\n\n\t- glyph01240\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01255\n\n\t- glyph01256\n\n\t- glyph01316\n\n\t- glyph01317\n\n\t- glyph01325\n\n\t- glyph01351\n\n\t- glyph01352\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01367\n\n\t- glyph01368\n\n\t- glyph01381\n\n\t- glyph01417\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01438\n\n\t- glyph01439\n\n\t- glyph01443\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01468\n\n\t- glyph01469\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01483\n\n\t- glyph01484\n\n\t- glyph01551\n\n\t- glyph01552\n\n\t- glyph01560\n\n\t- glyph01562\n\n\t- glyph01564\n\n\t- glyph01565\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01569\n\n\t- glyph01600\n\n\t- glyph01611\n\n\t- glyph01612\n\n\t- glyph01613\n\n\t- glyph01614\n\n\t- glyph01616\n\n\t- glyph01617\n\n\t- glyph01618\n\n\t- glyph01619\n\n\t- glyph01620\n\n\t- glyph01621\n\n\t- glyph01622\n\n\t- glyph01623\n\n\t- glyph01624\n\n\t- glyph01626\n\n\t- glyph01627\n\n\t- glyph01628\n\n\t- glyph01629\n\n\t- glyph01630\n\n\t- glyph01631\n\n\t- glyph01632\n\n\t- glyph01633\n\n\t- glyph01634\n\n\t- glyph01635\n\n\t- glyph01636\n\n\t- glyph01637\n\n\t- glyph01638\n\n\t- glyph01639\n\n\t- glyph01640\n\n\t- glyph01641\n\n\t- glyph01642\n\n\t- glyph01643\n\n\t- glyph01644\n\n\t- glyph01645\n\n\t- glyph01646\n\n\t- glyph01647\n\n\t- glyph01648\n\n\t- glyph01649\n\n\t- glyph01650\n\n\t- glyph01651\n\n\t- glyph01652\n\n\t- glyph01653\n\n\t- glyph01654\n\n\t- glyph01655\n\n\t- glyph01656\n\n\t- glyph01657\n\n\t- glyph01658\n\n\t- glyph01659\n\n\t- glyph01660\n\n\t- glyph01661\n\n\t- glyph01662\n\n\t- glyph01663\n\n\t- glyph01664\n\n\t- glyph01665\n\n\t- glyph01666\n\n\t- glyph01667\n\n\t- glyph01668\n\n\t- glyph01669\n\n\t- glyph01670\n\n\t- glyph01671\n\n\t- glyph01672\n\n\t- glyph01673\n\n\t- glyph01674\n\n\t- glyph01675\n\n\t- glyph01676\n\n\t- glyph01677\n\n\t- glyph01678\n\n\t- glyph01679\n\n\t- glyph01680\n\n\t- glyph01681\n\n\t- glyph01682\n\n\t- glyph01683\n\n\t- glyph01684\n\n\t- glyph01685\n\n\t- glyph01686\n\n\t- glyph01687\n\n\t- glyph01688\n\n\t- glyph01689\n\n\t- glyph01690\n\n\t- glyph01691\n\n\t- glyph01692\n\n\t- glyph01693\n\n\t- glyph01694\n\n\t- glyph01695\n\n\t- glyph01696\n\n\t- glyph01697\n\n\t- glyph01698\n\n\t- glyph01699\n\n\t- glyph01700\n\n\t- glyph01701\n\n\t- glyph01702\n\n\t- glyph01703\n\n\t- glyph01704\n\n\t- glyph01705\n\n\t- glyph01706\n\n\t- glyph01707\n\n\t- glyph01708\n\n\t- glyph01709\n\n\t- glyph01710\n\n\t- glyph01711\n\n\t- glyph01712\n\n\t- glyph01713\n\n\t- glyph01714\n\n\t- glyph01715\n\n\t- glyph01716\n\n\t- glyph01717\n\n\t- glyph01718\n\n\t- glyph01719\n\n\t- glyph01720\n\n\t- glyph01721\n\n\t- glyph01722\n\n\t- glyph01723\n\n\t- glyph01724\n\n\t- glyph01725\n\n\t- glyph01726\n\n\t- glyph01727\n\n\t- glyph01728\n\n\t- glyph01729\n\n\t- glyph01730\n\n\t- glyph01731\n\n\t- glyph01732\n\n\t- glyph01733\n\n\t- glyph01734\n\n\t- glyph01735\n\n\t- glyph01736\n\n\t- glyph01737\n\n\t- glyph01738\n\n\t- glyph01739\n\n\t- glyph01740\n\n\t- glyph01741\n\n\t- glyph01742\n\n\t- glyph01743\n\n\t- glyph01744\n\n\t- glyph01745\n\n\t- glyph01746\n\n\t- glyph01747\n\n\t- glyph01748\n\n\t- glyph01749\n\n\t- glyph01750\n\n\t- glyph01751\n\n\t- glyph01752\n\n\t- glyph01753\n\n\t- glyph01754\n\n\t- glyph01755\n\n\t- glyph01756\n\n\t- glyph01757\n\n\t- glyph01758\n\n\t- glyph01759\n\n\t- glyph01760\n\n\t- glyph01761\n\n\t- glyph01762\n\n\t- glyph01763\n\n\t- glyph01764\n\n\t- glyph01765\n\n\t- glyph01786\n\n\t- glyph01823\n\n\t- glyph01824\n\n\t- glyph01825\n\n\t- glyph01826\n\n\t- glyph01827\n\n\t- glyph01828\n\n\t- glyph01829\n\n\t- glyph01830\n\n\t- glyph01831\n\n\t- glyph01832\n\n\t- glyph01833\n\n\t- glyph01834\n\n\t- glyph02314\n\n\t- glyph02339\n\n\t- glyph02371\n\n\t- glyph02502\n\n\t- glyph02783\n\n\t- glyph02784\n\n\t- glyph02791\n\n\t- glyph02814\n\n\t- glyph02817\n\n\t- glyph02820\n\n\t- glyph02828\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02837\n\n\t- glyph02842\n\n\t- glyph02860\n\n\t- glyph02866\n\n\t- glyph02871\n\n\t- glyph02874\n\n\t- glyph02877\n\n\t- glyph02883\n\n\t- glyph02889\n\n\t- glyph02893\n\n\t- glyph02896\n\n\t- glyph02900\n\n\t- glyph02903\n\n\t- glyph02905\n\n\t- glyph02908\n\n\t- glyph02911\n\n\t- glyph02914\n\n\t- glyph02917\n\n\t- glyph02920\n\n\t- glyph02923\n\n\t- glyph02926\n\n\t- glyph02929\n\n\t- glyph02932\n\n\t- glyph02936\n\n\t- glyph02939\n\n\t- glyph02942\n\n\t- glyph02945\n\n\t- glyph02948\n\n\t- glyph02951\n\n\t- glyph02953\n\n\t- glyph03007\n\n\t- glyph03010\n\n\t- glyph03013\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs had components with scaling or rotation\nor inverted outline direction:\n\n* glyph01798 (component glyph00180)\n* glyph01798 (component dotaccent)\n* glyph01798 (component dotaccent)\n* uni034B (component glyph00180)\n* uni034B (component dotaccent)\n* uni034B (component dotaccent)\n [code: transformed-components]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "FAIL" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1186:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "PASS" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00305\n\n\t- glyph00363\n\n\t- glyph00467\n\n\t- glyph00469\n\n\t- glyph00471\n\n\t- glyph00473\n\n\t- glyph00494\n\n\t- glyph00495\n\n\t- glyph00496\n\n\t- glyph00507\n\n\t- glyph00511\n\n\t- glyph00512\n\n\t- glyph00515\n\n\t- glyph00516\n\n\t- glyph00517\n\n\t- glyph00519\n\n\t- glyph00520\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00529\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00533\n\n\t- glyph00534\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00539\n\n\t- glyph00540\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00550\n\n\t- glyph00551\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00556\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00566\n\n\t- glyph00567\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00572\n\n\t- glyph00573\n\n\t- glyph00574\n\n\t- glyph00922\n\n\t- glyph00947\n\n\t- glyph01108\n\n\t- glyph01110\n\n\t- glyph01112\n\n\t- glyph01113\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01152\n\n\t- glyph01162\n\n\t- glyph01174\n\n\t- glyph01198\n\n\t- glyph01233\n\n\t- glyph01237\n\n\t- glyph01238\n\n\t- glyph01246\n\n\t- glyph01247\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01314\n\n\t- glyph01315\n\n\t- glyph01349\n\n\t- glyph01350\n\n\t- glyph01363\n\n\t- glyph01364\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01379\n\n\t- glyph01415\n\n\t- glyph01421\n\n\t- glyph01422\n\n\t- glyph01424\n\n\t- glyph01425\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01441\n\n\t- glyph01461\n\n\t- glyph01462\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01479\n\n\t- glyph01480\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01549\n\n\t- glyph01550\n\n\t- glyph01556\n\n\t- glyph01557\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01571\n\n\t- glyph01572\n\n\t- glyph01573\n\n\t- glyph01574\n\n\t- glyph01575\n\n\t- glyph01576\n\n\t- glyph02084\n\n\t- glyph02110\n\n\t- glyph02143\n\n\t- glyph02276\n\n\t- glyph02557\n\n\t- glyph02558\n\n\t- glyph02564\n\n\t- glyph02587\n\n\t- glyph02590\n\n\t- glyph02593\n\n\t- glyph02601\n\n\t- glyph02605\n\n\t- glyph02606\n\n\t- glyph02610\n\n\t- glyph02615\n\n\t- glyph02627\n\n\t- glyph02635\n\n\t- glyph02641\n\n\t- glyph02646\n\n\t- glyph02649\n\n\t- glyph02652\n\n\t- glyph02658\n\n\t- glyph02664\n\n\t- glyph02668\n\n\t- glyph02671\n\n\t- glyph02675\n\n\t- glyph02678\n\n\t- glyph02680\n\n\t- glyph02683\n\n\t- glyph02686\n\n\t- glyph02689\n\n\t- glyph02692\n\n\t- glyph02695\n\n\t- glyph02698\n\n\t- glyph02701\n\n\t- glyph02704\n\n\t- glyph02707\n\n\t- glyph02711\n\n\t- glyph02714\n\n\t- glyph02717\n\n\t- glyph02720\n\n\t- glyph02723\n\n\t- glyph02726\n\n\t- glyph02728\n\n\t- glyph02782\n\n\t- glyph02785\n\n\t- glyph02788\n\n\t- glyph02794\n\n\t- glyph02805\n\n\t- glyph02806\n\n\t- glyph02807\n\n\t- glyph02808\n\n\t- glyph02810\n\n\t- glyph02811\n\n\t- glyph02812\n\n\t- glyph02813\n\n\t- glyph02814\n\n\t- glyph02815\n\n\t- glyph02816\n\n\t- glyph02817\n\n\t- glyph02818\n\n\t- glyph02820\n\n\t- glyph02821\n\n\t- glyph02822\n\n\t- glyph02823\n\n\t- glyph02824\n\n\t- glyph02825\n\n\t- glyph02826\n\n\t- glyph02827\n\n\t- glyph02828\n\n\t- glyph02829\n\n\t- glyph02830\n\n\t- glyph02831\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02834\n\n\t- glyph02835\n\n\t- glyph02836\n\n\t- glyph02837\n\n\t- glyph02838\n\n\t- glyph02839\n\n\t- glyph02840\n\n\t- glyph02841\n\n\t- glyph02842\n\n\t- glyph02843\n\n\t- glyph02844\n\n\t- glyph02845\n\n\t- glyph02846\n\n\t- glyph02847\n\n\t- glyph02848\n\n\t- glyph02849\n\n\t- glyph02850\n\n\t- glyph02851\n\n\t- glyph02852\n\n\t- glyph02853\n\n\t- glyph02854\n\n\t- glyph02855\n\n\t- glyph02856\n\n\t- glyph02857\n\n\t- glyph02858\n\n\t- glyph02859\n\n\t- glyph02860\n\n\t- glyph02861\n\n\t- glyph02862\n\n\t- glyph02863\n\n\t- glyph02864\n\n\t- glyph02865\n\n\t- glyph02866\n\n\t- glyph02867\n\n\t- glyph02868\n\n\t- glyph02869\n\n\t- glyph02870\n\n\t- glyph02871\n\n\t- glyph02872\n\n\t- glyph02873\n\n\t- glyph02874\n\n\t- glyph02875\n\n\t- glyph02876\n\n\t- glyph02877\n\n\t- glyph02878\n\n\t- glyph02879\n\n\t- glyph02880\n\n\t- glyph02881\n\n\t- glyph02882\n\n\t- glyph02883\n\n\t- glyph02884\n\n\t- glyph02885\n\n\t- glyph02886\n\n\t- glyph02887\n\n\t- glyph02888\n\n\t- glyph02889\n\n\t- glyph02890\n\n\t- glyph02891\n\n\t- glyph02892\n\n\t- glyph02893\n\n\t- glyph02894\n\n\t- glyph02895\n\n\t- glyph02896\n\n\t- glyph02897\n\n\t- glyph02898\n\n\t- glyph02899\n\n\t- glyph02900\n\n\t- glyph02901\n\n\t- glyph02902\n\n\t- glyph02903\n\n\t- glyph02904\n\n\t- glyph02905\n\n\t- glyph02906\n\n\t- glyph02907\n\n\t- glyph02908\n\n\t- glyph02909\n\n\t- glyph02910\n\n\t- glyph02911\n\n\t- glyph02912\n\n\t- glyph02913\n\n\t- glyph02914\n\n\t- glyph02915\n\n\t- glyph02916\n\n\t- glyph02917\n\n\t- glyph02918\n\n\t- glyph02919\n\n\t- glyph02920\n\n\t- glyph02921\n\n\t- glyph02922\n\n\t- glyph02923\n\n\t- glyph02924\n\n\t- glyph02925\n\n\t- glyph02926\n\n\t- glyph02927\n\n\t- glyph02928\n\n\t- glyph02929\n\n\t- glyph02930\n\n\t- glyph02931\n\n\t- glyph02932\n\n\t- glyph02933\n\n\t- glyph02934\n\n\t- glyph02935\n\n\t- glyph02936\n\n\t- glyph02937\n\n\t- glyph02938\n\n\t- glyph02939\n\n\t- glyph02940\n\n\t- glyph02941\n\n\t- glyph02942\n\n\t- glyph02943\n\n\t- glyph02944\n\n\t- glyph02945\n\n\t- glyph02946\n\n\t- glyph02947\n\n\t- glyph02948\n\n\t- glyph02949\n\n\t- glyph02950\n\n\t- glyph02951\n\n\t- glyph02952\n\n\t- glyph02953\n\n\t- glyph02954\n\n\t- glyph02955\n\n\t- glyph02956\n\n\t- glyph02957\n\n\t- glyph02958\n\n\t- glyph02959\n\n\t- glyph03006\n\n\t- glyph03007\n\n\t- glyph03008\n\n\t- glyph03009\n\n\t- glyph03010\n\n\t- glyph03011\n\n\t- glyph03012\n\n\t- glyph03013\n\n\t- glyph03014\n\n\t- glyph03015\n\n\t- glyph03016\n\n\t- glyph03017\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "No glyphs had components with scaling or rotation", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "PASS" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1245:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "WARN" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00306\n\n\t- glyph00365\n\n\t- glyph00496\n\n\t- glyph00497\n\n\t- glyph00498\n\n\t- glyph00509\n\n\t- glyph00513\n\n\t- glyph00514\n\n\t- glyph00517\n\n\t- glyph00518\n\n\t- glyph00519\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00525\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00532\n\n\t- glyph00533\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00538\n\n\t- glyph00539\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00549\n\n\t- glyph00550\n\n\t- glyph00552\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00565\n\n\t- glyph00566\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00571\n\n\t- glyph00572\n\n\t- glyph00574\n\n\t- glyph00575\n\n\t- glyph00576\n\n\t- glyph00924\n\n\t- glyph00949\n\n\t- glyph01110\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01116\n\n\t- glyph01117\n\n\t- glyph01154\n\n\t- glyph01164\n\n\t- glyph01176\n\n\t- glyph01200\n\n\t- glyph01235\n\n\t- glyph01239\n\n\t- glyph01240\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01255\n\n\t- glyph01256\n\n\t- glyph01316\n\n\t- glyph01317\n\n\t- glyph01351\n\n\t- glyph01352\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01367\n\n\t- glyph01368\n\n\t- glyph01381\n\n\t- glyph01417\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01438\n\n\t- glyph01439\n\n\t- glyph01443\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01468\n\n\t- glyph01469\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01483\n\n\t- glyph01484\n\n\t- glyph01551\n\n\t- glyph01552\n\n\t- glyph01560\n\n\t- glyph01562\n\n\t- glyph01564\n\n\t- glyph01565\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01569\n\n\t- glyph01600\n\n\t- glyph01611\n\n\t- glyph01612\n\n\t- glyph01613\n\n\t- glyph01614\n\n\t- glyph01616\n\n\t- glyph01617\n\n\t- glyph01618\n\n\t- glyph01619\n\n\t- glyph01620\n\n\t- glyph01621\n\n\t- glyph01622\n\n\t- glyph01623\n\n\t- glyph01624\n\n\t- glyph01626\n\n\t- glyph01627\n\n\t- glyph01628\n\n\t- glyph01629\n\n\t- glyph01630\n\n\t- glyph01631\n\n\t- glyph01632\n\n\t- glyph01633\n\n\t- glyph01634\n\n\t- glyph01635\n\n\t- glyph01636\n\n\t- glyph01637\n\n\t- glyph01638\n\n\t- glyph01639\n\n\t- glyph01640\n\n\t- glyph01641\n\n\t- glyph01642\n\n\t- glyph01643\n\n\t- glyph01644\n\n\t- glyph01645\n\n\t- glyph01646\n\n\t- glyph01647\n\n\t- glyph01648\n\n\t- glyph01649\n\n\t- glyph01650\n\n\t- glyph01651\n\n\t- glyph01652\n\n\t- glyph01653\n\n\t- glyph01654\n\n\t- glyph01655\n\n\t- glyph01656\n\n\t- glyph01657\n\n\t- glyph01658\n\n\t- glyph01659\n\n\t- glyph01660\n\n\t- glyph01661\n\n\t- glyph01662\n\n\t- glyph01663\n\n\t- glyph01664\n\n\t- glyph01665\n\n\t- glyph01666\n\n\t- glyph01667\n\n\t- glyph01668\n\n\t- glyph01669\n\n\t- glyph01670\n\n\t- glyph01671\n\n\t- glyph01672\n\n\t- glyph01673\n\n\t- glyph01674\n\n\t- glyph01675\n\n\t- glyph01676\n\n\t- glyph01677\n\n\t- glyph01678\n\n\t- glyph01679\n\n\t- glyph01680\n\n\t- glyph01681\n\n\t- glyph01682\n\n\t- glyph01683\n\n\t- glyph01684\n\n\t- glyph01685\n\n\t- glyph01686\n\n\t- glyph01687\n\n\t- glyph01688\n\n\t- glyph01689\n\n\t- glyph01690\n\n\t- glyph01691\n\n\t- glyph01692\n\n\t- glyph01693\n\n\t- glyph01694\n\n\t- glyph01695\n\n\t- glyph01696\n\n\t- glyph01697\n\n\t- glyph01698\n\n\t- glyph01699\n\n\t- glyph01700\n\n\t- glyph01701\n\n\t- glyph01702\n\n\t- glyph01703\n\n\t- glyph01704\n\n\t- glyph01705\n\n\t- glyph01706\n\n\t- glyph01707\n\n\t- glyph01708\n\n\t- glyph01709\n\n\t- glyph01710\n\n\t- glyph01711\n\n\t- glyph01712\n\n\t- glyph01713\n\n\t- glyph01714\n\n\t- glyph01715\n\n\t- glyph01716\n\n\t- glyph01717\n\n\t- glyph01718\n\n\t- glyph01719\n\n\t- glyph01720\n\n\t- glyph01721\n\n\t- glyph01722\n\n\t- glyph01723\n\n\t- glyph01724\n\n\t- glyph01725\n\n\t- glyph01726\n\n\t- glyph01727\n\n\t- glyph01728\n\n\t- glyph01729\n\n\t- glyph01730\n\n\t- glyph01731\n\n\t- glyph01732\n\n\t- glyph01733\n\n\t- glyph01734\n\n\t- glyph01735\n\n\t- glyph01736\n\n\t- glyph01737\n\n\t- glyph01738\n\n\t- glyph01739\n\n\t- glyph01740\n\n\t- glyph01741\n\n\t- glyph01742\n\n\t- glyph01743\n\n\t- glyph01744\n\n\t- glyph01745\n\n\t- glyph01746\n\n\t- glyph01747\n\n\t- glyph01748\n\n\t- glyph01749\n\n\t- glyph01750\n\n\t- glyph01751\n\n\t- glyph01752\n\n\t- glyph01753\n\n\t- glyph01754\n\n\t- glyph01755\n\n\t- glyph01756\n\n\t- glyph01757\n\n\t- glyph01758\n\n\t- glyph01759\n\n\t- glyph01760\n\n\t- glyph01761\n\n\t- glyph01762\n\n\t- glyph01763\n\n\t- glyph01764\n\n\t- glyph01765\n\n\t- glyph01786\n\n\t- glyph01823\n\n\t- glyph01824\n\n\t- glyph01825\n\n\t- glyph01826\n\n\t- glyph01827\n\n\t- glyph01828\n\n\t- glyph01829\n\n\t- glyph01830\n\n\t- glyph01831\n\n\t- glyph01832\n\n\t- glyph01833\n\n\t- glyph01834\n\n\t- glyph02314\n\n\t- glyph02339\n\n\t- glyph02371\n\n\t- glyph02502\n\n\t- glyph02783\n\n\t- glyph02784\n\n\t- glyph02791\n\n\t- glyph02814\n\n\t- glyph02817\n\n\t- glyph02820\n\n\t- glyph02828\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02837\n\n\t- glyph02842\n\n\t- glyph02860\n\n\t- glyph02866\n\n\t- glyph02871\n\n\t- glyph02874\n\n\t- glyph02877\n\n\t- glyph02883\n\n\t- glyph02889\n\n\t- glyph02893\n\n\t- glyph02896\n\n\t- glyph02900\n\n\t- glyph02903\n\n\t- glyph02905\n\n\t- glyph02908\n\n\t- glyph02911\n\n\t- glyph02914\n\n\t- glyph02917\n\n\t- glyph02920\n\n\t- glyph02923\n\n\t- glyph02926\n\n\t- glyph02929\n\n\t- glyph02932\n\n\t- glyph02936\n\n\t- glyph02939\n\n\t- glyph02942\n\n\t- glyph02945\n\n\t- glyph02948\n\n\t- glyph02951\n\n\t- glyph02953\n\n\t- glyph03007\n\n\t- glyph03010\n\n\t- glyph03013\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni0246\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni0246\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs had components with scaling or rotation\nor inverted outline direction:\n\n* glyph01798 (component glyph00180)\n* glyph01798 (component dotaccent)\n* glyph01798 (component dotaccent)\n* uni034B (component glyph00180)\n* uni034B (component dotaccent)\n* uni034B (component dotaccent)\n [code: transformed-components]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "FAIL" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1157:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "PASS" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00306\n\n\t- glyph00365\n\n\t- glyph00469\n\n\t- glyph00470\n\n\t- glyph00471\n\n\t- glyph00472\n\n\t- glyph00473\n\n\t- glyph00474\n\n\t- glyph00475\n\n\t- glyph00476\n\n\t- glyph00496\n\n\t- glyph00497\n\n\t- glyph00498\n\n\t- glyph00509\n\n\t- glyph00513\n\n\t- glyph00514\n\n\t- glyph00517\n\n\t- glyph00518\n\n\t- glyph00519\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00525\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00532\n\n\t- glyph00533\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00538\n\n\t- glyph00539\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00549\n\n\t- glyph00550\n\n\t- glyph00552\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00565\n\n\t- glyph00566\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00571\n\n\t- glyph00572\n\n\t- glyph00574\n\n\t- glyph00575\n\n\t- glyph00576\n\n\t- glyph00924\n\n\t- glyph00949\n\n\t- glyph01110\n\n\t- glyph01112\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01116\n\n\t- glyph01117\n\n\t- glyph01154\n\n\t- glyph01164\n\n\t- glyph01176\n\n\t- glyph01200\n\n\t- glyph01235\n\n\t- glyph01239\n\n\t- glyph01240\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01255\n\n\t- glyph01256\n\n\t- glyph01316\n\n\t- glyph01317\n\n\t- glyph01320\n\n\t- glyph01351\n\n\t- glyph01352\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01367\n\n\t- glyph01368\n\n\t- glyph01381\n\n\t- glyph01417\n\n\t- glyph01424\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01438\n\n\t- glyph01439\n\n\t- glyph01443\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01468\n\n\t- glyph01469\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01483\n\n\t- glyph01484\n\n\t- glyph01551\n\n\t- glyph01552\n\n\t- glyph01560\n\n\t- glyph01562\n\n\t- glyph01564\n\n\t- glyph01565\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01569\n\n\t- glyph01600\n\n\t- glyph01611\n\n\t- glyph01612\n\n\t- glyph01613\n\n\t- glyph01614\n\n\t- glyph01616\n\n\t- glyph01617\n\n\t- glyph01618\n\n\t- glyph01619\n\n\t- glyph01620\n\n\t- glyph01621\n\n\t- glyph01622\n\n\t- glyph01623\n\n\t- glyph01624\n\n\t- glyph01626\n\n\t- glyph01627\n\n\t- glyph01628\n\n\t- glyph01629\n\n\t- glyph01630\n\n\t- glyph01631\n\n\t- glyph01632\n\n\t- glyph01633\n\n\t- glyph01634\n\n\t- glyph01635\n\n\t- glyph01636\n\n\t- glyph01637\n\n\t- glyph01638\n\n\t- glyph01639\n\n\t- glyph01640\n\n\t- glyph01641\n\n\t- glyph01642\n\n\t- glyph01643\n\n\t- glyph01644\n\n\t- glyph01645\n\n\t- glyph01646\n\n\t- glyph01647\n\n\t- glyph01648\n\n\t- glyph01649\n\n\t- glyph01650\n\n\t- glyph01651\n\n\t- glyph01652\n\n\t- glyph01653\n\n\t- glyph01654\n\n\t- glyph01655\n\n\t- glyph01656\n\n\t- glyph01657\n\n\t- glyph01658\n\n\t- glyph01659\n\n\t- glyph01660\n\n\t- glyph01661\n\n\t- glyph01662\n\n\t- glyph01663\n\n\t- glyph01664\n\n\t- glyph01665\n\n\t- glyph01666\n\n\t- glyph01667\n\n\t- glyph01668\n\n\t- glyph01669\n\n\t- glyph01670\n\n\t- glyph01671\n\n\t- glyph01672\n\n\t- glyph01673\n\n\t- glyph01674\n\n\t- glyph01675\n\n\t- glyph01676\n\n\t- glyph01677\n\n\t- glyph01678\n\n\t- glyph01679\n\n\t- glyph01680\n\n\t- glyph01681\n\n\t- glyph01682\n\n\t- glyph01683\n\n\t- glyph01684\n\n\t- glyph01685\n\n\t- glyph01686\n\n\t- glyph01687\n\n\t- glyph01688\n\n\t- glyph01689\n\n\t- glyph01690\n\n\t- glyph01691\n\n\t- glyph01692\n\n\t- glyph01693\n\n\t- glyph01694\n\n\t- glyph01695\n\n\t- glyph01696\n\n\t- glyph01697\n\n\t- glyph01698\n\n\t- glyph01699\n\n\t- glyph01700\n\n\t- glyph01701\n\n\t- glyph01702\n\n\t- glyph01703\n\n\t- glyph01704\n\n\t- glyph01705\n\n\t- glyph01706\n\n\t- glyph01707\n\n\t- glyph01708\n\n\t- glyph01709\n\n\t- glyph01710\n\n\t- glyph01711\n\n\t- glyph01712\n\n\t- glyph01713\n\n\t- glyph01714\n\n\t- glyph01715\n\n\t- glyph01716\n\n\t- glyph01717\n\n\t- glyph01718\n\n\t- glyph01719\n\n\t- glyph01720\n\n\t- glyph01721\n\n\t- glyph01722\n\n\t- glyph01723\n\n\t- glyph01724\n\n\t- glyph01725\n\n\t- glyph01726\n\n\t- glyph01727\n\n\t- glyph01728\n\n\t- glyph01729\n\n\t- glyph01730\n\n\t- glyph01731\n\n\t- glyph01732\n\n\t- glyph01733\n\n\t- glyph01734\n\n\t- glyph01735\n\n\t- glyph01736\n\n\t- glyph01737\n\n\t- glyph01738\n\n\t- glyph01739\n\n\t- glyph01740\n\n\t- glyph01741\n\n\t- glyph01742\n\n\t- glyph01743\n\n\t- glyph01744\n\n\t- glyph01745\n\n\t- glyph01746\n\n\t- glyph01747\n\n\t- glyph01748\n\n\t- glyph01749\n\n\t- glyph01750\n\n\t- glyph01751\n\n\t- glyph01752\n\n\t- glyph01753\n\n\t- glyph01754\n\n\t- glyph01755\n\n\t- glyph01756\n\n\t- glyph01757\n\n\t- glyph01758\n\n\t- glyph01759\n\n\t- glyph01760\n\n\t- glyph01761\n\n\t- glyph01762\n\n\t- glyph01763\n\n\t- glyph01764\n\n\t- glyph01765\n\n\t- glyph01786\n\n\t- glyph01823\n\n\t- glyph01824\n\n\t- glyph01825\n\n\t- glyph01826\n\n\t- glyph01827\n\n\t- glyph01828\n\n\t- glyph01829\n\n\t- glyph01830\n\n\t- glyph01831\n\n\t- glyph01832\n\n\t- glyph01833\n\n\t- glyph01834\n\n\t- glyph02314\n\n\t- glyph02339\n\n\t- glyph02371\n\n\t- glyph02502\n\n\t- glyph02783\n\n\t- glyph02784\n\n\t- glyph02791\n\n\t- glyph02814\n\n\t- glyph02817\n\n\t- glyph02820\n\n\t- glyph02828\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02837\n\n\t- glyph02842\n\n\t- glyph02860\n\n\t- glyph02866\n\n\t- glyph02871\n\n\t- glyph02874\n\n\t- glyph02877\n\n\t- glyph02883\n\n\t- glyph02889\n\n\t- glyph02893\n\n\t- glyph02896\n\n\t- glyph02900\n\n\t- glyph02903\n\n\t- glyph02905\n\n\t- glyph02908\n\n\t- glyph02911\n\n\t- glyph02914\n\n\t- glyph02917\n\n\t- glyph02920\n\n\t- glyph02923\n\n\t- glyph02926\n\n\t- glyph02929\n\n\t- glyph02932\n\n\t- glyph02936\n\n\t- glyph02939\n\n\t- glyph02942\n\n\t- glyph02945\n\n\t- glyph02948\n\n\t- glyph02951\n\n\t- glyph02953\n\n\t- glyph03007\n\n\t- glyph03010\n\n\t- glyph03013\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs had components with scaling or rotation\nor inverted outline direction:\n\n* glyph01798 (component glyph00180)\n* glyph01798 (component dotaccent)\n* glyph01798 (component dotaccent)\n* uni034B (component glyph00180)\n* uni034B (component dotaccent)\n* uni034B (component dotaccent)\n [code: transformed-components]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "FAIL" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1181:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "PASS" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Name table record with key = (1, 0, 0, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (1, 0, 0, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 0) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + }, + { + "message": "Name table record with key = (3, 1, 1033, 13) has trailing spaces that must be removed: 'Copyright [...]org/OFL). ' [code: trailing-space]", + "status": "FAIL", + "traceback": null + } + ], + "result": "FAIL" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font has version 3 post table.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "SKIP" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "SKIP" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "TrueType fonts with a format 3 post table contain no glyph names.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "SKIP" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- glyph00121\n\n\t- glyph00305\n\n\t- glyph00363\n\n\t- glyph00494\n\n\t- glyph00495\n\n\t- glyph00496\n\n\t- glyph00507\n\n\t- glyph00511\n\n\t- glyph00512\n\n\t- glyph00515\n\n\t- glyph00516\n\n\t- glyph00517\n\n\t- glyph00519\n\n\t- glyph00520\n\n\t- glyph00521\n\n\t- glyph00522\n\n\t- glyph00523\n\n\t- glyph00524\n\n\t- glyph00526\n\n\t- glyph00528\n\n\t- glyph00529\n\n\t- glyph00530\n\n\t- glyph00531\n\n\t- glyph00533\n\n\t- glyph00534\n\n\t- glyph00535\n\n\t- glyph00536\n\n\t- glyph00537\n\n\t- glyph00539\n\n\t- glyph00540\n\n\t- glyph00541\n\n\t- glyph00542\n\n\t- glyph00543\n\n\t- glyph00544\n\n\t- glyph00545\n\n\t- glyph00546\n\n\t- glyph00547\n\n\t- glyph00548\n\n\t- glyph00550\n\n\t- glyph00551\n\n\t- glyph00553\n\n\t- glyph00555\n\n\t- glyph00556\n\n\t- glyph00557\n\n\t- glyph00558\n\n\t- glyph00559\n\n\t- glyph00560\n\n\t- glyph00561\n\n\t- glyph00562\n\n\t- glyph00563\n\n\t- glyph00564\n\n\t- glyph00566\n\n\t- glyph00567\n\n\t- glyph00568\n\n\t- glyph00569\n\n\t- glyph00570\n\n\t- glyph00572\n\n\t- glyph00573\n\n\t- glyph00574\n\n\t- glyph00922\n\n\t- glyph00947\n\n\t- glyph01108\n\n\t- glyph01112\n\n\t- glyph01113\n\n\t- glyph01114\n\n\t- glyph01115\n\n\t- glyph01152\n\n\t- glyph01162\n\n\t- glyph01174\n\n\t- glyph01198\n\n\t- glyph01233\n\n\t- glyph01237\n\n\t- glyph01238\n\n\t- glyph01246\n\n\t- glyph01247\n\n\t- glyph01248\n\n\t- glyph01249\n\n\t- glyph01250\n\n\t- glyph01251\n\n\t- glyph01252\n\n\t- glyph01253\n\n\t- glyph01254\n\n\t- glyph01314\n\n\t- glyph01315\n\n\t- glyph01349\n\n\t- glyph01350\n\n\t- glyph01363\n\n\t- glyph01364\n\n\t- glyph01365\n\n\t- glyph01366\n\n\t- glyph01379\n\n\t- glyph01415\n\n\t- glyph01421\n\n\t- glyph01422\n\n\t- glyph01424\n\n\t- glyph01425\n\n\t- glyph01426\n\n\t- glyph01427\n\n\t- glyph01428\n\n\t- glyph01429\n\n\t- glyph01430\n\n\t- glyph01431\n\n\t- glyph01432\n\n\t- glyph01433\n\n\t- glyph01434\n\n\t- glyph01435\n\n\t- glyph01436\n\n\t- glyph01437\n\n\t- glyph01441\n\n\t- glyph01461\n\n\t- glyph01462\n\n\t- glyph01463\n\n\t- glyph01464\n\n\t- glyph01465\n\n\t- glyph01466\n\n\t- glyph01467\n\n\t- glyph01479\n\n\t- glyph01480\n\n\t- glyph01481\n\n\t- glyph01482\n\n\t- glyph01549\n\n\t- glyph01550\n\n\t- glyph01556\n\n\t- glyph01557\n\n\t- glyph01566\n\n\t- glyph01567\n\n\t- glyph01568\n\n\t- glyph01571\n\n\t- glyph01572\n\n\t- glyph01573\n\n\t- glyph01574\n\n\t- glyph01575\n\n\t- glyph01576\n\n\t- glyph02084\n\n\t- glyph02110\n\n\t- glyph02143\n\n\t- glyph02276\n\n\t- glyph02557\n\n\t- glyph02558\n\n\t- glyph02564\n\n\t- glyph02587\n\n\t- glyph02590\n\n\t- glyph02593\n\n\t- glyph02601\n\n\t- glyph02605\n\n\t- glyph02606\n\n\t- glyph02610\n\n\t- glyph02615\n\n\t- glyph02627\n\n\t- glyph02635\n\n\t- glyph02641\n\n\t- glyph02646\n\n\t- glyph02649\n\n\t- glyph02652\n\n\t- glyph02658\n\n\t- glyph02664\n\n\t- glyph02668\n\n\t- glyph02671\n\n\t- glyph02675\n\n\t- glyph02678\n\n\t- glyph02680\n\n\t- glyph02683\n\n\t- glyph02686\n\n\t- glyph02689\n\n\t- glyph02692\n\n\t- glyph02695\n\n\t- glyph02698\n\n\t- glyph02701\n\n\t- glyph02704\n\n\t- glyph02707\n\n\t- glyph02711\n\n\t- glyph02714\n\n\t- glyph02717\n\n\t- glyph02720\n\n\t- glyph02723\n\n\t- glyph02726\n\n\t- glyph02728\n\n\t- glyph02782\n\n\t- glyph02785\n\n\t- glyph02788\n\n\t- glyph02794\n\n\t- glyph02805\n\n\t- glyph02806\n\n\t- glyph02807\n\n\t- glyph02808\n\n\t- glyph02810\n\n\t- glyph02811\n\n\t- glyph02812\n\n\t- glyph02813\n\n\t- glyph02814\n\n\t- glyph02815\n\n\t- glyph02816\n\n\t- glyph02817\n\n\t- glyph02818\n\n\t- glyph02820\n\n\t- glyph02821\n\n\t- glyph02822\n\n\t- glyph02823\n\n\t- glyph02824\n\n\t- glyph02825\n\n\t- glyph02826\n\n\t- glyph02827\n\n\t- glyph02828\n\n\t- glyph02829\n\n\t- glyph02830\n\n\t- glyph02831\n\n\t- glyph02832\n\n\t- glyph02833\n\n\t- glyph02834\n\n\t- glyph02835\n\n\t- glyph02836\n\n\t- glyph02837\n\n\t- glyph02838\n\n\t- glyph02839\n\n\t- glyph02840\n\n\t- glyph02841\n\n\t- glyph02842\n\n\t- glyph02843\n\n\t- glyph02844\n\n\t- glyph02845\n\n\t- glyph02846\n\n\t- glyph02847\n\n\t- glyph02848\n\n\t- glyph02849\n\n\t- glyph02850\n\n\t- glyph02851\n\n\t- glyph02852\n\n\t- glyph02853\n\n\t- glyph02854\n\n\t- glyph02855\n\n\t- glyph02856\n\n\t- glyph02857\n\n\t- glyph02858\n\n\t- glyph02859\n\n\t- glyph02860\n\n\t- glyph02861\n\n\t- glyph02862\n\n\t- glyph02863\n\n\t- glyph02864\n\n\t- glyph02865\n\n\t- glyph02866\n\n\t- glyph02867\n\n\t- glyph02868\n\n\t- glyph02869\n\n\t- glyph02870\n\n\t- glyph02871\n\n\t- glyph02872\n\n\t- glyph02873\n\n\t- glyph02874\n\n\t- glyph02875\n\n\t- glyph02876\n\n\t- glyph02877\n\n\t- glyph02878\n\n\t- glyph02879\n\n\t- glyph02880\n\n\t- glyph02881\n\n\t- glyph02882\n\n\t- glyph02883\n\n\t- glyph02884\n\n\t- glyph02885\n\n\t- glyph02886\n\n\t- glyph02887\n\n\t- glyph02888\n\n\t- glyph02889\n\n\t- glyph02890\n\n\t- glyph02891\n\n\t- glyph02892\n\n\t- glyph02893\n\n\t- glyph02894\n\n\t- glyph02895\n\n\t- glyph02896\n\n\t- glyph02897\n\n\t- glyph02898\n\n\t- glyph02899\n\n\t- glyph02900\n\n\t- glyph02901\n\n\t- glyph02902\n\n\t- glyph02903\n\n\t- glyph02904\n\n\t- glyph02905\n\n\t- glyph02906\n\n\t- glyph02907\n\n\t- glyph02908\n\n\t- glyph02909\n\n\t- glyph02910\n\n\t- glyph02911\n\n\t- glyph02912\n\n\t- glyph02913\n\n\t- glyph02914\n\n\t- glyph02915\n\n\t- glyph02916\n\n\t- glyph02917\n\n\t- glyph02918\n\n\t- glyph02919\n\n\t- glyph02920\n\n\t- glyph02921\n\n\t- glyph02922\n\n\t- glyph02923\n\n\t- glyph02924\n\n\t- glyph02925\n\n\t- glyph02926\n\n\t- glyph02927\n\n\t- glyph02928\n\n\t- glyph02929\n\n\t- glyph02930\n\n\t- glyph02931\n\n\t- glyph02932\n\n\t- glyph02933\n\n\t- glyph02934\n\n\t- glyph02935\n\n\t- glyph02936\n\n\t- glyph02937\n\n\t- glyph02938\n\n\t- glyph02939\n\n\t- glyph02940\n\n\t- glyph02941\n\n\t- glyph02942\n\n\t- glyph02943\n\n\t- glyph02944\n\n\t- glyph02945\n\n\t- glyph02946\n\n\t- glyph02947\n\n\t- glyph02948\n\n\t- glyph02949\n\n\t- glyph02950\n\n\t- glyph02951\n\n\t- glyph02952\n\n\t- glyph02953\n\n\t- glyph02954\n\n\t- glyph02955\n\n\t- glyph02956\n\n\t- glyph02957\n\n\t- glyph02958\n\n\t- glyph02959\n\n\t- glyph03006\n\n\t- glyph03007\n\n\t- glyph03008\n\n\t- glyph03009\n\n\t- glyph03010\n\n\t- glyph03011\n\n\t- glyph03012\n\n\t- glyph03013\n\n\t- glyph03014\n\n\t- glyph03015\n\n\t- glyph03016\n\n\t- glyph03017\n\n\t- glyph03022\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni01F5\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni023A\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni1E97\tContours detected: 1\tExpected: 3\n\n\t- Glyph name: uni2158\tContours detected: 6\tExpected: 3 or 4\n\n\t- Glyph name: iotadieresis\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni01E5\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni023A\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni046E\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni046F\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: uni1E97\tContours detected: 1\tExpected: 3\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "No glyphs had components with scaling or rotation", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "PASS" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 1160 among a set of 14 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 1224:\northogonal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "dcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "lcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "tcaron is decomposed and therefore could not be checked. Please check manually. [code: decomposed-outline]", + "status": "WARN", + "traceback": null + }, + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "WARN" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "FAIL": 26, + "INFO": 36, + "PASS": 255, + "SKIP": 162, + "WARN": 81 + } + }, + { + "checks": [ + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 54 + } + }, + { + "checks": [ + { + "description": "Fonts have equal unicode encodings?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have equal unicode encodings.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "Make sure all font files have the same version value.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "All font files have the same version.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 37, + "SKIP": 18 + } + }, + { + "checks": [ + { + "description": "Fonts have consistent PANOSE proportion?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent PANOSE proportion.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Fonts have consistent PANOSE family type?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent PANOSE family type.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that OS/2.fsSelection bold & italic settings are unique for each NameID1", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "The OS/2.fsSelection bold & italic settings were unique within each compatible family group.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec: name ID 1 'is used in combination with Font Subfamily\n name (name ID 2), and should be shared among at most four fonts that differ\n only in weight or style.\n\n This four-way distinction should also be reflected in the OS/2.fsSelection\n field, using bits 0 and 5.\n ", + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 75, + "SKIP": 18 + } + }, + { + "checks": [ + { + "description": "Fonts have consistent underline thickness?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Thickness of the underline is not the same across this family. In order to fix this, please make sure that the underlineThickness value is the same in the 'post' table of all of this family font files.\nDetected underlineThickness values are:\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf: 89\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf: 36\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf: 99\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf: 99\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf: 59\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf: 99\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf: 89\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf: 96\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf: 98\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf: 19\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf: 19\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf: 36\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf: 99\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf: 92\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf: 59\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf: 98\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf: 96\n\t/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf: 92\n [code: inconsistent-underline-thickness]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Dave C Lemon (Adobe Type Team) recommends setting the underline thickness to be\n consistent across the family.\n\n If thicknesses are not family consistent, words set on the same line which have\n different styles look strange.\n ", + "result": "FAIL" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is -7.0 with style=\"Italic\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is -7.0 with style=\"ExtraLightItalic\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is 0.0 with style=\"Bold\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is 0.0 with style=\"Black\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is 0.0 with style=\"Light\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is -7.0 with style=\"BoldItalic\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is 0.0 with style=\"Regular\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is -7.0 with style=\"SemiBoldItalic\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is -7.0 with style=\"ExtraBoldItalic\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is 0.0 with style=\"Thin\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is -7.0 with style=\"ThinItalic\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is 0.0 with style=\"ExtraLight\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is -7.0 with style=\"BlackItalic\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is 0.0 with style=\"Medium\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is -7.0 with style=\"LightItalic\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is 0.0 with style=\"ExtraBold\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is 0.0 with style=\"SemiBold\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Post table format 3 use has niche use case problems.Please review the check rationale for additional details. [code: post-table-version]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "WARN" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is -7.0 with style=\"MediumItalic\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "FAIL": 1, + "PASS": 18, + "WARN": 18 + } + }, + { + "checks": [ + { + "description": "Verify that each group of fonts with the same nameID 1 has maximum of 4 fonts.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "There were no more than 4 fonts per family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec:\n\n 'The Font Family name [...] should be shared among at most four fonts that\n differ only in weight or style [...]'\n ", + "result": "PASS" + }, + { + "description": "Verify that family names in the name table are consistent across all fonts in the family. Checks Typographic Family name (nameID 16) if present, otherwise uses Font Family name (nameID 1)", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Font family names are consistent across the family.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec:\n * \"...many existing applications that use this pair of names assume that a\n Font Family name is shared by at most four fonts that form a font\n style-linking group\"\n * \"For extended typographic families that includes fonts other than the\n four basic styles(regular, italic, bold, bold italic), it is strongly\n recommended that name IDs 16 and 17 be used in fonts to create an\n extended, typographic grouping.\"\n * \"If name ID 16 is absent, then name ID 1 is considered to be the\n typographic family name.\"\n\n https://learn.microsoft.com/en-us/typography/opentype/spec/name\n\n Fonts within a font family all must have consistent names\n in the Typographic Family name (nameID 16)\n or Font Family name (nameID 1), depending on which it uses.\n\n Inconsistent font/typographic family names across fonts in a family\n can result in unexpected behaviors, such as broken style linking.\n ", + "result": "PASS" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All font names are good for Italic fonts.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "PASS" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Name ID 2 (Subfamily Name) does not conform to specs. Only R/I/B/BI are allowed.\nGot: 'ExtraLight Italic'. [code: bad-subfamilyname]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "FAIL" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font is not Italic.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "SKIP" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font is not Italic.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "SKIP" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font is not Italic.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "SKIP" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "All font names are good for Italic fonts.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "PASS" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font is not Italic.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "SKIP" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Name ID 2 (Subfamily Name) does not conform to specs. Only R/I/B/BI are allowed.\nGot: 'SemiBold Italic'. [code: bad-subfamilyname]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "FAIL" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Name ID 2 (Subfamily Name) does not conform to specs. Only R/I/B/BI are allowed.\nGot: 'ExtraBold Italic'. [code: bad-subfamilyname]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "FAIL" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font is not Italic.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "SKIP" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Name ID 2 (Subfamily Name) does not conform to specs. Only R/I/B/BI are allowed.\nGot: 'Thin Italic'. [code: bad-subfamilyname]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "FAIL" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font is not Italic.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "SKIP" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Name ID 2 (Subfamily Name) does not conform to specs. Only R/I/B/BI are allowed.\nGot: 'Black Italic'. [code: bad-subfamilyname]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "FAIL" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font is not Italic.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "SKIP" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Name ID 2 (Subfamily Name) does not conform to specs. Only R/I/B/BI are allowed.\nGot: 'Light Italic'. [code: bad-subfamilyname]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "FAIL" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font is not Italic.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "SKIP" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font is not Italic.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "SKIP" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Name ID 2 (Subfamily Name) does not conform to specs. Only R/I/B/BI are allowed.\nGot: 'Medium Italic'. [code: bad-subfamilyname]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "FAIL" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "FAIL": 7, + "PASS": 130, + "SKIP": 27 + } + }, + { + "checks": [ + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 18 + } + }, + { + "checks": [ + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + }, + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 36 + } + }, + { + "checks": [ + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + }, + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "ok", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 18 + } + }, + { + "checks": [ + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + }, + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 54 + } + }, + { + "checks": [ + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 18 + } + }, + { + "checks": [ + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + }, + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 18 + } + }, + { + "checks": [ + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs have coordinates which are out of bounds:\n\t* ('uni034B', -419.6497802734375, 1752.900146484375)\n\t* ('uni034B', -395.9251708984375, 1752.900146484375) and ('uni034B', -371.45916748046875, 1752.900146484375)\n\nThis happens a lot when points are not extremes, which is usually bad. However, fixing this alert by adding points on extremes may do more harm than good, especially with italics, calligraphic-script, handwriting, rounded and other fonts. So it is common to ignore this message. [code: points-out-of-bounds]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs have coordinates which are out of bounds:\n\t* ('glyph01798', -403.142578125, 2053.50537109375)\n\t* ('glyph01798', -382.6064453125, 2053.50537109375)\n\t* ('glyph01798', -360.8623046875, 2053.50537109375)\n\t* ('uni034B', -50.47149658203125, 1534.4677734375)\n\t* ('uni034B', -50.47149658203125, 1489.919921875)\n\t* ('uni034B', -421.1962890625, 1771.7025756835938)\n\t* ('uni034B', -397.11572265625, 1771.7025756835938) and ('uni034B', -371.61865234375, 1771.7025756835938)\n\nThis happens a lot when points are not extremes, which is usually bad. However, fixing this alert by adding points on extremes may do more harm than good, especially with italics, calligraphic-script, handwriting, rounded and other fonts. So it is common to ignore this message. [code: points-out-of-bounds]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs have coordinates which are out of bounds:\n\t* ('glyph01798', -81.09722900390625, 1797.126708984375)\n\t* ('glyph01798', -81.09722900390625, 1760.708984375)\n\t* ('glyph01798', -403.63189697265625, 1962.8214111328125)\n\t* ('glyph01798', -383.94940185546875, 1962.8214111328125)\n\t* ('glyph01798', -364.26690673828125, 1962.8214111328125)\n\t* ('uni034B', -83.14398193359375, 1492.3457641601562) and ('uni034B', -83.14398193359375, 1453.26416015625)\n\nThis happens a lot when points are not extremes, which is usually bad. However, fixing this alert by adding points on extremes may do more harm than good, especially with italics, calligraphic-script, handwriting, rounded and other fonts. So it is common to ignore this message. [code: points-out-of-bounds]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs have coordinates which are out of bounds:\n\t* ('glyph01798', -411.733642578125, 1819.8993530273438)\n\t* ('glyph01798', -384.9931640625, 1819.8993530273438)\n\t* ('glyph01798', -372.57794189453125, 1819.8993530273438)\n\t* ('uni034B', -413.328857421875, 1594.7725219726562)\n\t* ('uni034B', -386.2568359375, 1594.7725219726562) and ('uni034B', -373.68768310546875, 1594.7725219726562)\n\nThis happens a lot when points are not extremes, which is usually bad. However, fixing this alert by adding points on extremes may do more harm than good, especially with italics, calligraphic-script, handwriting, rounded and other fonts. So it is common to ignore this message. [code: points-out-of-bounds]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs have coordinates which are out of bounds:\n\t* ('glyph01798', -74.45343017578125, 1809.5278930664062)\n\t* ('glyph01798', -74.45343017578125, 1772.1881103515625)\n\t* ('glyph01798', -403.447265625, 1981.92578125)\n\t* ('glyph01798', -383.73779296875, 1981.92578125) and ('glyph01798', -364.0283203125, 1981.92578125)\n\nThis happens a lot when points are not extremes, which is usually bad. However, fixing this alert by adding points on extremes may do more harm than good, especially with italics, calligraphic-script, handwriting, rounded and other fonts. So it is common to ignore this message. [code: points-out-of-bounds]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs have coordinates which are out of bounds:\n\t* ('glyph01798', -68.1947021484375, 1822.85986328125)\n\t* ('glyph01798', -68.1947021484375, 1784.7354736328125)\n\t* ('uni034B', -415.705322265625, 1731.6357421875)\n\t* ('uni034B', -393.1092529296875, 1731.6357421875) and ('uni034B', -370.51318359375, 1731.6357421875)\n\nThis happens a lot when points are not extremes, which is usually bad. However, fixing this alert by adding points on extremes may do more harm than good, especially with italics, calligraphic-script, handwriting, rounded and other fonts. So it is common to ignore this message. [code: points-out-of-bounds]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + }, + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 48, + "WARN": 6 + } + }, + { + "checks": [ + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 288 + } + }, + { + "checks": [ + { + "description": "Ensure VFs have 'ital' STAT axis.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check that related Upright and Italic VFs have a\n 'ital' axis in STAT table.\n ", + "result": "PASS" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1, + "SKIP": 72 + } + }, + { + "checks": [ + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 54 + } + }, + { + "checks": [ + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Italic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 1 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Bold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 2 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Black.ttf", + "key": [ + "", + "", + [ + [ + "font", + 3 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Light.ttf", + "key": [ + "", + "", + [ + [ + "font", + 4 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 5 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 6 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 7 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBoldItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 8 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Thin.ttf", + "key": [ + "", + "", + [ + [ + "font", + 9 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ThinItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 10 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraLight.ttf", + "key": [ + "", + "", + [ + [ + "font", + 11 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-BlackItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 12 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-Medium.ttf", + "key": [ + "", + "", + [ + [ + "font", + 13 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-LightItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 14 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-ExtraBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 15 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-SemiBold.ttf", + "key": [ + "", + "", + [ + [ + "font", + 16 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Nateni (Latn, 100,000 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/lato/Lato-MediumItalic.ttf", + "key": [ + "", + "", + [ + [ + "font", + 17 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: i\u030a i\u030b i\u030d i\u0310 i\u0313 i\u1dc6 i\u1dc7 j\u0300 j\u0301 j\u0303 j\u0304 j\u0308 j\u0311 \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u0268\u0300 \u0268\u0301 \u0268\u0302 \u0268\u0303 \u0268\u0304 \u0268\u0308 \u0268\u030b \u0268\u030c \u0268\u030f \u0268\u0327\u0300 \u0268\u0327\u0301 \u0268\u0327\u0302 \u0268\u0327\u030c \u0268\u0331\u0300 \u0268\u0331\u0301 \u0268\u0331\u0308 \u0456\u0301 \u1e2d\u0300 \u1e2d\u0301 \u1e2d\u0304 \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0307 i\u030e i\u0312 i\u0314 i\u033d i\u033e i\u033f i\u0342 i\u0346 i\u034a i\u034b i\u034c i\u0350 i\u0351 i\u0352 i\u0357 i\u035b i\u0363 i\u0364\n\nYour font fully covers the following languages that require the soft-dotted feature: Ebira (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Lugbara (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Ejagham (Latn, 120,000 speakers), Aghem (Latn, 38,843 speakers), Igbo (Latn, 27,823,640 speakers), Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Avokaya (Latn, 100,000 speakers), Basaa (Latn, 332,940 speakers), Nateni (Latn, 100,000 speakers), Dan (Latn, 1,099,244 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 72, + "WARN": 18 + } + } + ] +} \ No newline at end of file diff --git a/docs/fontbakery-reports/lato/GoogleFonts.json b/docs/fontbakery-reports/lato/GoogleFonts.json new file mode 100644 index 00000000..8119c19a --- /dev/null +++ b/docs/fontbakery-reports/lato/GoogleFonts.json @@ -0,0 +1,7 @@ +{ + "color": "green", + "label": "Google Fonts", + "logoSvg": "", + "message": "79%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/lato/ShapingChecks.json b/docs/fontbakery-reports/lato/ShapingChecks.json new file mode 100644 index 00000000..1e5a3896 --- /dev/null +++ b/docs/fontbakery-reports/lato/ShapingChecks.json @@ -0,0 +1,7 @@ +{ + "color": "red", + "label": "Shaping Checks", + "logoSvg": "", + "message": "0%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/lato/Universal.json b/docs/fontbakery-reports/lato/Universal.json new file mode 100644 index 00000000..a0c3d9c9 --- /dev/null +++ b/docs/fontbakery-reports/lato/Universal.json @@ -0,0 +1,7 @@ +{ + "color": "yellow", + "label": "Universal", + "logoSvg": "", + "message": "68%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/lato/overall.json b/docs/fontbakery-reports/lato/overall.json new file mode 100644 index 00000000..42b13732 --- /dev/null +++ b/docs/fontbakery-reports/lato/overall.json @@ -0,0 +1,7 @@ +{ + "color": "green", + "label": "FontBakery QA", + "logoSvg": "", + "message": "79%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/loversquarrel-report.html b/docs/fontbakery-reports/loversquarrel-report.html new file mode 100644 index 00000000..3b158c2d --- /dev/null +++ b/docs/fontbakery-reports/loversquarrel-report.html @@ -0,0 +1,1293 @@ + + + + + FontBakery Check Report + + + +
+ +
+ Fontbakery Technical Report +
+
+ +
+

If you think a check is flawed or have an idea for a check, please file an issue at https://github.com/fonttools/fontbakery/issues and remember to include a pointer to the repo and branch you're checking.

+

Summary

+ + + + + + + + + + + + + + + + + + + + + + + + + +
💥 ERROR🔥 FAIL⚠️ WARN⏩ SKIPℹ️ INFO✅ PASS
0414608155
0%2%8%34%5%88%
+ +

Note: The following loglevels were omitted in this report: SKIP, INFO, PASS, DEBUG

+ +

Meaning of check results:

+ +
    +
  • 💥 An ERROR is something wrong with FontBakery itself, possibly a bug. +
  • 🔥 A FAIL is a problem with the font that must be fixed. +
  • ⚠️ A WARN is something that you should consider addressing. +
  • ℹ️ An INFO result simply prints something useful. Typically stats. +
  • ✅ A PASS means the font looks good for the given checking routine. +
  • ⏩ And a SKIP happens when the check does not apply to the given font. +
+ +

If you get ERRORs, please help us improve the tool by reporting them at our + issue tracker.

+ +

(but other kinds of bug reports and/or feature requests + are also always welcome, of course!)

+ +

FontBakery version: 0.9.2

+ +

Section: Google Fonts

+🔥🔥🔥⚠️⚠️⚠️⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ +

Check Google Fonts glyph coverage.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/glyph_coverage>
+ +
🔥 LoversQuarrel-Regular.ttf
  • 🔥 FAIL

    Missing required codepoints:

    +
    - 0x010A (LATIN CAPITAL LETTER C WITH DOT ABOVE)
    +
    +
    +- 0x011E (LATIN CAPITAL LETTER G WITH BREVE)
    +
    +
    +- 0x0120 (LATIN CAPITAL LETTER G WITH DOT ABOVE)
    +
    +
    +- 0x0126 (LATIN CAPITAL LETTER H WITH STROKE)
    +
    +
    +- 0x0130 (LATIN CAPITAL LETTER I WITH DOT ABOVE)
    +
    +
    +- 0x0218 (LATIN CAPITAL LETTER S WITH COMMA BELOW)
    +
    +
    +- 0x021A (LATIN CAPITAL LETTER T WITH COMMA BELOW)
    +
    +
    +- 0x016C (LATIN CAPITAL LETTER U WITH BREVE)
    +
    +
    +- 0x010B (LATIN SMALL LETTER C WITH DOT ABOVE)
    +
    +
    +- 0x011F (LATIN SMALL LETTER G WITH BREVE)
    +
    +
    +- 0x0121 (LATIN SMALL LETTER G WITH DOT ABOVE)
    +
    +
    +- 0x0219 (LATIN SMALL LETTER S WITH COMMA BELOW)
    +
    +
    +- 0x021B (LATIN SMALL LETTER T WITH COMMA BELOW)
    +
    +
    +- 0x016D (LATIN SMALL LETTER U WITH BREVE)
    +
    +

    [code: missing-codepoints]

    +
+

Check for codepoints not covered by METADATA subsets.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/unreachable_subsetting>
+ +
⚠️ LoversQuarrel-Regular.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+02C7 CARON: try adding one of: canadian-aboriginal, tifinagh, yi
    • +
    • U+02D8 BREVE: try adding one of: canadian-aboriginal, yi
    • +
    • U+02D9 DOT ABOVE: try adding one of: canadian-aboriginal, yi
    • +
    • U+02DB OGONEK: try adding one of: canadian-aboriginal, yi
    • +
    • U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition
    • +
    • U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: cherokee, tifinagh, math, coptic
    • +
    • U+0306 COMBINING BREVE: try adding one of: old-permic, tifinagh
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: syriac, old-permic, tai-le, malayalam, math, coptic, canadian-aboriginal, tifinagh
    • +
    • U+030A COMBINING RING ABOVE: try adding syriac
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: cherokee, osage
    • +
    • U+030C COMBINING CARON: try adding one of: cherokee, tai-le
    • +
    • U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition
    • +
    • U+031B COMBINING HORN: not included in any glyphset definition
    • +
    • U+0326 COMBINING COMMA BELOW: not included in any glyphset definition
    • +
    • U+0327 COMBINING CEDILLA: not included in any glyphset definition
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+03A9 GREEK CAPITAL LETTER OMEGA: try adding one of: greek, math, elbasan
    • +
    • U+03BC GREEK SMALL LETTER MU: try adding one of: greek, math
    • +
    • U+03C0 GREEK SMALL LETTER PI: try adding one of: greek, math, yi
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+2202 PARTIAL DIFFERENTIAL: try adding math
    • +
    • U+2206 INCREMENT: try adding math
    • +
    • U+220F N-ARY PRODUCT: try adding math
    • +
    • U+2211 N-ARY SUMMATION: try adding math
    • +
    • U+221A SQUARE ROOT: try adding math
    • +
    • U+221E INFINITY: try adding math
    • +
    • U+222B INTEGRAL: try adding math
    • +
    • U+2248 ALMOST EQUAL TO: try adding math
    • +
    • U+2260 NOT EQUAL TO: try adding math
    • +
    • U+2264 LESS-THAN OR EQUAL TO: try adding math
    • +
    • U+2265 GREATER-THAN OR EQUAL TO: try adding math
    • +
    • U+25CA LOZENGE: try adding one of: symbols, math
    • +
    • U+F8FF : not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: latin, latin-ext, menu, vietnamese [code: unreachable-subsetting]

    +
+

Check OFL body text is correct.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/license/OFL_body_text>
+ +
🔥 LoversQuarrel-Regular.ttf
  • 🔥 FAIL

    The OFL.txt body text is incorrect. Please use https://github.com/googlefonts/Unified-Font-Repository/blob/main/OFL.txt as a template. You should only modify the first line. [code: incorrect-ofl-body-text]

    +
+

Font has old ttfautohint applied?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/old_ttfautohint>
+ +
⚠️ LoversQuarrel-Regular.ttf
  • ⚠️ WARN

    ttfautohint used in font = 1.8.3; latest = 1.8.4; Need to re-run with the newer version! [code: old-ttfa]

    +
+

METADATA.pb: Check URL on copyright string is the same as in repository_url field.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/consistent_repo_urls>
+ +
🔥 LoversQuarrel-Regular.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: https://github.com/googlefonts/lovers-quarrel +[code: mismatch]

    +
+

Are there caret positions declared for every ligature?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/ligature_carets>
+ +
⚠️ LoversQuarrel-Regular.ttf
  • ⚠️ WARN

    This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]

    +
+

Is there kerning info for non-ligated sequences?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/kerning_for_non_ligated_sequences>
+ +
⚠️ LoversQuarrel-Regular.ttf
  • ⚠️ WARN

    GPOS table lacks kerning info for the following non-ligated sequences:

    +
    - f + i
    +
    +- i + l [code: lacks-kern-info]
    +
    +
+

A static fonts directory with at least two fonts must accompany variable fonts

+
Check ID: <FontBakeryCheck:com.google.fonts/check/repo/vf_has_static_fonts>
+ +
⚠️ LoversQuarrel-Regular.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+

On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/description/family_update>
+ +
⚠️ LoversQuarrel-Regular.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+

Ensure fonts have ScriptLangTags declared on the 'meta' table.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/meta/script_lang_tags>
+ +
⚠️ LoversQuarrel-Regular.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+

Section: Universal

+🔥⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩⏩ℹ️ℹ️ +

Check font contains no unreachable glyphs

+
Check ID: <FontBakeryCheck:com.google.fonts/check/unreachable_glyphs>
+ +
⚠️ LoversQuarrel-Regular.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - NULL
    +
    +- RS
    +
    +- US
    +
    +- _229
    +
    +- caron.alt
    +
    +- uni0326.001
    +
    +

    [code: unreachable-glyphs]

    +
+

Check if each glyph has the recommended amount of contours.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/contour_count>
+ +
⚠️ LoversQuarrel-Regular.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: percent	Contours detected: 4	Expected: 5
    +
    +- Glyph name: ampersand	Contours detected: 9	Expected: 1, 2 or 3
    +
    +- Glyph name: zero	Contours detected: 1	Expected: 2 or 3
    +
    +- Glyph name: A	Contours detected: 6	Expected: 2
    +
    +- Glyph name: B	Contours detected: 7	Expected: 2 or 3
    +
    +- Glyph name: C	Contours detected: 4	Expected: 1
    +
    +- Glyph name: D	Contours detected: 8	Expected: 2
    +
    +- Glyph name: E	Contours detected: 5	Expected: 1
    +
    +- Glyph name: F	Contours detected: 4	Expected: 1
    +
    +- Glyph name: G	Contours detected: 7	Expected: 1
    +
    +- Glyph name: H	Contours detected: 5	Expected: 1
    +
    +- Glyph name: I	Contours detected: 5	Expected: 1
    +
    +- Glyph name: J	Contours detected: 3	Expected: 1
    +
    +- Glyph name: K	Contours detected: 6	Expected: 1 or 2
    +
    +- Glyph name: L	Contours detected: 7	Expected: 1
    +
    +- Glyph name: M	Contours detected: 9	Expected: 1
    +
    +- Glyph name: N	Contours detected: 7	Expected: 1
    +
    +- Glyph name: O	Contours detected: 7	Expected: 2
    +
    +- Glyph name: P	Contours detected: 9	Expected: 1 or 2
    +
    +- Glyph name: Q	Contours detected: 7	Expected: 2
    +
    +- Glyph name: R	Contours detected: 5	Expected: 1 or 2
    +
    +- Glyph name: S	Contours detected: 8	Expected: 1
    +
    +- Glyph name: T	Contours detected: 4	Expected: 1
    +
    +- Glyph name: U	Contours detected: 5	Expected: 1
    +
    +- Glyph name: V	Contours detected: 4	Expected: 1
    +
    +- Glyph name: W	Contours detected: 5	Expected: 1 or 2
    +
    +- Glyph name: X	Contours detected: 5	Expected: 1
    +
    +- Glyph name: Y	Contours detected: 7	Expected: 1
    +
    +- Glyph name: Z	Contours detected: 6	Expected: 1
    +
    +- Glyph name: a	Contours detected: 1	Expected: 2
    +
    +- Glyph name: b	Contours detected: 1	Expected: 2
    +
    +- Glyph name: h	Contours detected: 2	Expected: 1
    +
    +- Glyph name: l	Contours detected: 2	Expected: 1
    +
    +- Glyph name: q	Contours detected: 1	Expected: 2
    +
    +- Glyph name: y	Contours detected: 2	Expected: 1
    +
    +- Glyph name: asciitilde	Contours detected: 2	Expected: 1
    +
    +- Glyph name: section	Contours detected: 8	Expected: 2
    +
    +- Glyph name: copyright	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni00AD	Contours detected: 1	Expected: 0
    +
    +- Glyph name: registered	Contours detected: 5	Expected: 3 or 4
    +
    +- Glyph name: Agrave	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Aacute	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Acircumflex	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Atilde	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Adieresis	Contours detected: 8	Expected: 4
    +
    +- Glyph name: Aring	Contours detected: 8	Expected: 3 or 4
    +
    +- Glyph name: AE	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Ccedilla	Contours detected: 5	Expected: 1 or 2
    +
    +- Glyph name: Egrave	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Eacute	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Ecircumflex	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Edieresis	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Igrave	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Iacute	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Icircumflex	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Idieresis	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Eth	Contours detected: 9	Expected: 2
    +
    +- Glyph name: Ntilde	Contours detected: 8	Expected: 2
    +
    +- Glyph name: Ograve	Contours detected: 8	Expected: 3
    +
    +- Glyph name: Oacute	Contours detected: 8	Expected: 3
    +
    +- Glyph name: Ocircumflex	Contours detected: 8	Expected: 3
    +
    +- Glyph name: Otilde	Contours detected: 8	Expected: 3
    +
    +- Glyph name: Odieresis	Contours detected: 9	Expected: 4
    +
    +- Glyph name: Oslash	Contours detected: 7	Expected: 2 or 3
    +
    +- Glyph name: Ugrave	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Uacute	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Ucircumflex	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Udieresis	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Yacute	Contours detected: 8	Expected: 2
    +
    +- Glyph name: agrave	Contours detected: 2	Expected: 3
    +
    +- Glyph name: aacute	Contours detected: 2	Expected: 3
    +
    +- Glyph name: acircumflex	Contours detected: 2	Expected: 3
    +
    +- Glyph name: atilde	Contours detected: 2	Expected: 3
    +
    +- Glyph name: adieresis	Contours detected: 3	Expected: 4
    +
    +- Glyph name: aring	Contours detected: 3	Expected: 4
    +
    +- Glyph name: yacute	Contours detected: 3	Expected: 2
    +
    +- Glyph name: ydieresis	Contours detected: 4	Expected: 3
    +
    +- Glyph name: Amacron	Contours detected: 7	Expected: 3
    +
    +- Glyph name: amacron	Contours detected: 2	Expected: 3
    +
    +- Glyph name: Abreve	Contours detected: 7	Expected: 3
    +
    +- Glyph name: abreve	Contours detected: 2	Expected: 3
    +
    +- Glyph name: Aogonek	Contours detected: 7	Expected: 2 or 3
    +
    +- Glyph name: Cacute	Contours detected: 5	Expected: 2
    +
    +- Glyph name: Ccaron	Contours detected: 5	Expected: 2
    +
    +- Glyph name: Dcaron	Contours detected: 9	Expected: 3
    +
    +- Glyph name: Dcroat	Contours detected: 9	Expected: 2
    +
    +- Glyph name: Emacron	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Edotaccent	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Eogonek	Contours detected: 6	Expected: 1 or 2
    +
    +- Glyph name: eogonek	Contours detected: 3	Expected: 2
    +
    +- Glyph name: Ecaron	Contours detected: 6	Expected: 2
    +
    +- Glyph name: uni0122	Contours detected: 8	Expected: 2
    +
    +- Glyph name: hbar	Contours detected: 2	Expected: 1
    +
    +- Glyph name: Itilde	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Imacron	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Iogonek	Contours detected: 6	Expected: 1 or 2
    +
    +- Glyph name: IJ	Contours detected: 7	Expected: 1 or 2
    +
    +- Glyph name: Jcircumflex	Contours detected: 4	Expected: 2
    +
    +- Glyph name: uni0136	Contours detected: 7	Expected: 2 or 3
    +
    +- Glyph name: Lacute	Contours detected: 8	Expected: 2
    +
    +- Glyph name: lacute	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni013B	Contours detected: 8	Expected: 2
    +
    +- Glyph name: uni013C	Contours detected: 3	Expected: 2
    +
    +- Glyph name: Lcaron	Contours detected: 8	Expected: 2
    +
    +- Glyph name: lcaron	Contours detected: 3	Expected: 2
    +
    +- Glyph name: Ldotaccent	Contours detected: 8	Expected: 2
    +
    +- Glyph name: ldot	Contours detected: 3	Expected: 2
    +
    +- Glyph name: Lslash	Contours detected: 8	Expected: 1
    +
    +- Glyph name: lslash	Contours detected: 2	Expected: 1
    +
    +- Glyph name: Nacute	Contours detected: 8	Expected: 2
    +
    +- Glyph name: uni0145	Contours detected: 8	Expected: 2
    +
    +- Glyph name: Ncaron	Contours detected: 8	Expected: 2
    +
    +- Glyph name: Eng	Contours detected: 7	Expected: 1
    +
    +- Glyph name: Omacron	Contours detected: 8	Expected: 3
    +
    +- Glyph name: Ohungarumlaut	Contours detected: 9	Expected: 4
    +
    +- Glyph name: OE	Contours detected: 9	Expected: 2
    +
    +- Glyph name: Racute	Contours detected: 6	Expected: 3
    +
    +- Glyph name: uni0156	Contours detected: 6	Expected: 3
    +
    +- Glyph name: Rcaron	Contours detected: 6	Expected: 3
    +
    +- Glyph name: Sacute	Contours detected: 9	Expected: 2
    +
    +- Glyph name: Scedilla	Contours detected: 9	Expected: 1 or 2
    +
    +- Glyph name: Scaron	Contours detected: 9	Expected: 2
    +
    +- Glyph name: uni0162	Contours detected: 5	Expected: 1 or 2
    +
    +- Glyph name: Tcaron	Contours detected: 5	Expected: 2
    +
    +- Glyph name: Tbar	Contours detected: 5	Expected: 1
    +
    +- Glyph name: Utilde	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Umacron	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Uring	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Uhungarumlaut	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Uogonek	Contours detected: 6	Expected: 1
    +
    +- Glyph name: uogonek	Contours detected: 2	Expected: 1
    +
    +- Glyph name: Wcircumflex	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Ycircumflex	Contours detected: 8	Expected: 2
    +
    +- Glyph name: ycircumflex	Contours detected: 3	Expected: 2
    +
    +- Glyph name: Ydieresis	Contours detected: 9	Expected: 3
    +
    +- Glyph name: Zacute	Contours detected: 7	Expected: 2
    +
    +- Glyph name: Zdotaccent	Contours detected: 7	Expected: 2
    +
    +- Glyph name: Zcaron	Contours detected: 7	Expected: 2
    +
    +- Glyph name: Ohorn	Contours detected: 8	Expected: 2 or 3
    +
    +- Glyph name: ohorn	Contours detected: 3	Expected: 2
    +
    +- Glyph name: Uhorn	Contours detected: 6	Expected: 1
    +
    +- Glyph name: uhorn	Contours detected: 2	Expected: 1
    +
    +- Glyph name: Wgrave	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Wacute	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Wdieresis	Contours detected: 7	Expected: 3
    +
    +- Glyph name: uni1E9E	Contours detected: 16	Expected: 1
    +
    +- Glyph name: uni1EA0	Contours detected: 7	Expected: 3
    +
    +- Glyph name: uni1EA1	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni1EA2	Contours detected: 7	Expected: 3
    +
    +- Glyph name: uni1EA3	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni1EA4	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EA5	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EA6	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EA7	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EA8	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EA9	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EAA	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EAB	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EAC	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EAD	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EAE	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EAF	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EB0	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EB1	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EB2	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EB3	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EB4	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EB5	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EB6	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EB7	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EB8	Contours detected: 6	Expected: 2
    +
    +- Glyph name: uni1EBA	Contours detected: 6	Expected: 2
    +
    +- Glyph name: uni1EBC	Contours detected: 6	Expected: 2
    +
    +- Glyph name: uni1EBE	Contours detected: 7	Expected: 3
    +
    +- Glyph name: uni1EC0	Contours detected: 7	Expected: 3
    +
    +- Glyph name: uni1EC2	Contours detected: 7	Expected: 3
    +
    +- Glyph name: uni1EC4	Contours detected: 7	Expected: 3
    +
    +- Glyph name: uni1EC6	Contours detected: 7	Expected: 3
    +
    +- Glyph name: uni1EC8	Contours detected: 6	Expected: 2
    +
    +- Glyph name: uni1ECA	Contours detected: 6	Expected: 2
    +
    +- Glyph name: uni1ECC	Contours detected: 8	Expected: 3
    +
    +- Glyph name: uni1ECE	Contours detected: 8	Expected: 3
    +
    +- Glyph name: uni1ED0	Contours detected: 9	Expected: 4
    +
    +- Glyph name: uni1ED2	Contours detected: 9	Expected: 4
    +
    +- Glyph name: uni1ED4	Contours detected: 9	Expected: 4
    +
    +- Glyph name: uni1ED6	Contours detected: 9	Expected: 4
    +
    +- Glyph name: uni1ED8	Contours detected: 9	Expected: 4
    +
    +- Glyph name: uni1EDA	Contours detected: 9	Expected: 3 or 4
    +
    +- Glyph name: uni1EDB	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni1EDC	Contours detected: 9	Expected: 3 or 4
    +
    +- Glyph name: uni1EDD	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni1EDE	Contours detected: 9	Expected: 3 or 4
    +
    +- Glyph name: uni1EDF	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni1EE0	Contours detected: 9	Expected: 3 or 4
    +
    +- Glyph name: uni1EE1	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni1EE2	Contours detected: 9	Expected: 3 or 4
    +
    +- Glyph name: uni1EE3	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni1EE4	Contours detected: 6	Expected: 2
    +
    +- Glyph name: uni1EE6	Contours detected: 6	Expected: 2
    +
    +- Glyph name: uni1EE8	Contours detected: 7	Expected: 2
    +
    +- Glyph name: uni1EE9	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni1EEA	Contours detected: 7	Expected: 2
    +
    +- Glyph name: uni1EEB	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni1EEC	Contours detected: 7	Expected: 2
    +
    +- Glyph name: uni1EED	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni1EEE	Contours detected: 7	Expected: 2
    +
    +- Glyph name: uni1EEF	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni1EF0	Contours detected: 7	Expected: 2
    +
    +- Glyph name: uni1EF1	Contours detected: 3	Expected: 2
    +
    +- Glyph name: Ygrave	Contours detected: 8	Expected: 2
    +
    +- Glyph name: ygrave	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni1EF4	Contours detected: 8	Expected: 2
    +
    +- Glyph name: uni1EF5	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni1EF6	Contours detected: 8	Expected: 2
    +
    +- Glyph name: uni1EF7	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni1EF8	Contours detected: 8	Expected: 2
    +
    +- Glyph name: uni1EF9	Contours detected: 3	Expected: 2
    +
    +- Glyph name: trademark	Contours detected: 8	Expected: 2
    +
    +- Glyph name: fl	Contours detected: 3	Expected: 1 or 2
    +
    +- Glyph name: A	Contours detected: 6	Expected: 2
    +
    +- Glyph name: AE	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Aacute	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Abreve	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Acircumflex	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Adieresis	Contours detected: 8	Expected: 4
    +
    +- Glyph name: Agrave	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Amacron	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Aogonek	Contours detected: 7	Expected: 2 or 3
    +
    +- Glyph name: Aring	Contours detected: 8	Expected: 3 or 4
    +
    +- Glyph name: Atilde	Contours detected: 7	Expected: 3
    +
    +- Glyph name: B	Contours detected: 7	Expected: 2 or 3
    +
    +- Glyph name: C	Contours detected: 4	Expected: 1
    +
    +- Glyph name: Cacute	Contours detected: 5	Expected: 2
    +
    +- Glyph name: Ccaron	Contours detected: 5	Expected: 2
    +
    +- Glyph name: Ccedilla	Contours detected: 5	Expected: 1 or 2
    +
    +- Glyph name: D	Contours detected: 8	Expected: 2
    +
    +- Glyph name: Dcaron	Contours detected: 9	Expected: 3
    +
    +- Glyph name: Dcroat	Contours detected: 9	Expected: 2
    +
    +- Glyph name: E	Contours detected: 5	Expected: 1
    +
    +- Glyph name: Eacute	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Ecaron	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Ecircumflex	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Edieresis	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Edotaccent	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Egrave	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Emacron	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Eng	Contours detected: 7	Expected: 1
    +
    +- Glyph name: Eogonek	Contours detected: 6	Expected: 1 or 2
    +
    +- Glyph name: Eth	Contours detected: 9	Expected: 2
    +
    +- Glyph name: F	Contours detected: 4	Expected: 1
    +
    +- Glyph name: G	Contours detected: 7	Expected: 1
    +
    +- Glyph name: H	Contours detected: 5	Expected: 1
    +
    +- Glyph name: I	Contours detected: 5	Expected: 1
    +
    +- Glyph name: IJ	Contours detected: 7	Expected: 1 or 2
    +
    +- Glyph name: Iacute	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Icircumflex	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Idieresis	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Igrave	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Imacron	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Iogonek	Contours detected: 6	Expected: 1 or 2
    +
    +- Glyph name: Itilde	Contours detected: 6	Expected: 2
    +
    +- Glyph name: J	Contours detected: 3	Expected: 1
    +
    +- Glyph name: Jcircumflex	Contours detected: 4	Expected: 2
    +
    +- Glyph name: K	Contours detected: 6	Expected: 1 or 2
    +
    +- Glyph name: L	Contours detected: 7	Expected: 1
    +
    +- Glyph name: Lacute	Contours detected: 8	Expected: 2
    +
    +- Glyph name: Lcaron	Contours detected: 8	Expected: 2
    +
    +- Glyph name: Lslash	Contours detected: 8	Expected: 1
    +
    +- Glyph name: M	Contours detected: 9	Expected: 1
    +
    +- Glyph name: N	Contours detected: 7	Expected: 1
    +
    +- Glyph name: Nacute	Contours detected: 8	Expected: 2
    +
    +- Glyph name: Ncaron	Contours detected: 8	Expected: 2
    +
    +- Glyph name: Ntilde	Contours detected: 8	Expected: 2
    +
    +- Glyph name: O	Contours detected: 7	Expected: 2
    +
    +- Glyph name: OE	Contours detected: 9	Expected: 2
    +
    +- Glyph name: Oacute	Contours detected: 8	Expected: 3
    +
    +- Glyph name: Ocircumflex	Contours detected: 8	Expected: 3
    +
    +- Glyph name: Odieresis	Contours detected: 9	Expected: 4
    +
    +- Glyph name: Ograve	Contours detected: 8	Expected: 3
    +
    +- Glyph name: Ohorn	Contours detected: 8	Expected: 2 or 3
    +
    +- Glyph name: Ohungarumlaut	Contours detected: 9	Expected: 4
    +
    +- Glyph name: Omacron	Contours detected: 8	Expected: 3
    +
    +- Glyph name: Oslash	Contours detected: 7	Expected: 2 or 3
    +
    +- Glyph name: Otilde	Contours detected: 8	Expected: 3
    +
    +- Glyph name: P	Contours detected: 9	Expected: 1 or 2
    +
    +- Glyph name: Q	Contours detected: 7	Expected: 2
    +
    +- Glyph name: R	Contours detected: 5	Expected: 1 or 2
    +
    +- Glyph name: Racute	Contours detected: 6	Expected: 3
    +
    +- Glyph name: Rcaron	Contours detected: 6	Expected: 3
    +
    +- Glyph name: S	Contours detected: 8	Expected: 1
    +
    +- Glyph name: Sacute	Contours detected: 9	Expected: 2
    +
    +- Glyph name: Scaron	Contours detected: 9	Expected: 2
    +
    +- Glyph name: T	Contours detected: 4	Expected: 1
    +
    +- Glyph name: Tbar	Contours detected: 5	Expected: 1
    +
    +- Glyph name: Tcaron	Contours detected: 5	Expected: 2
    +
    +- Glyph name: U	Contours detected: 5	Expected: 1
    +
    +- Glyph name: Uacute	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Ucircumflex	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Udieresis	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Ugrave	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Uhorn	Contours detected: 6	Expected: 1
    +
    +- Glyph name: Uhungarumlaut	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Umacron	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Uogonek	Contours detected: 6	Expected: 1
    +
    +- Glyph name: Uring	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Utilde	Contours detected: 6	Expected: 2
    +
    +- Glyph name: V	Contours detected: 4	Expected: 1
    +
    +- Glyph name: W	Contours detected: 5	Expected: 1 or 2
    +
    +- Glyph name: Wacute	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Wcircumflex	Contours detected: 6	Expected: 2
    +
    +- Glyph name: Wdieresis	Contours detected: 7	Expected: 3
    +
    +- Glyph name: Wgrave	Contours detected: 6	Expected: 2
    +
    +- Glyph name: X	Contours detected: 5	Expected: 1
    +
    +- Glyph name: Y	Contours detected: 7	Expected: 1
    +
    +- Glyph name: Yacute	Contours detected: 8	Expected: 2
    +
    +- Glyph name: Ycircumflex	Contours detected: 8	Expected: 2
    +
    +- Glyph name: Ydieresis	Contours detected: 9	Expected: 3
    +
    +- Glyph name: Ygrave	Contours detected: 8	Expected: 2
    +
    +- Glyph name: Z	Contours detected: 6	Expected: 1
    +
    +- Glyph name: Zacute	Contours detected: 7	Expected: 2
    +
    +- Glyph name: Zcaron	Contours detected: 7	Expected: 2
    +
    +- Glyph name: Zdotaccent	Contours detected: 7	Expected: 2
    +
    +- Glyph name: a	Contours detected: 1	Expected: 2
    +
    +- Glyph name: aacute	Contours detected: 2	Expected: 3
    +
    +- Glyph name: abreve	Contours detected: 2	Expected: 3
    +
    +- Glyph name: acircumflex	Contours detected: 2	Expected: 3
    +
    +- Glyph name: adieresis	Contours detected: 3	Expected: 4
    +
    +- Glyph name: agrave	Contours detected: 2	Expected: 3
    +
    +- Glyph name: amacron	Contours detected: 2	Expected: 3
    +
    +- Glyph name: ampersand	Contours detected: 9	Expected: 1, 2 or 3
    +
    +- Glyph name: aring	Contours detected: 3	Expected: 4
    +
    +- Glyph name: asciitilde	Contours detected: 2	Expected: 1
    +
    +- Glyph name: atilde	Contours detected: 2	Expected: 3
    +
    +- Glyph name: b	Contours detected: 1	Expected: 2
    +
    +- Glyph name: copyright	Contours detected: 4	Expected: 3
    +
    +- Glyph name: eogonek	Contours detected: 3	Expected: 2
    +
    +- Glyph name: fi	Contours detected: 2	Expected: 3
    +
    +- Glyph name: fl	Contours detected: 3	Expected: 2
    +
    +- Glyph name: h	Contours detected: 2	Expected: 1
    +
    +- Glyph name: hbar	Contours detected: 2	Expected: 1
    +
    +- Glyph name: l	Contours detected: 2	Expected: 1
    +
    +- Glyph name: lacute	Contours detected: 3	Expected: 2
    +
    +- Glyph name: lcaron	Contours detected: 3	Expected: 2
    +
    +- Glyph name: ldot	Contours detected: 3	Expected: 2
    +
    +- Glyph name: lslash	Contours detected: 2	Expected: 1
    +
    +- Glyph name: ohorn	Contours detected: 3	Expected: 2
    +
    +- Glyph name: percent	Contours detected: 4	Expected: 5
    +
    +- Glyph name: q	Contours detected: 1	Expected: 2
    +
    +- Glyph name: registered	Contours detected: 5	Expected: 3 or 4
    +
    +- Glyph name: section	Contours detected: 8	Expected: 2
    +
    +- Glyph name: trademark	Contours detected: 8	Expected: 2
    +
    +- Glyph name: uhorn	Contours detected: 2	Expected: 1
    +
    +- Glyph name: uni00AD	Contours detected: 1	Expected: 0
    +
    +- Glyph name: uni0122	Contours detected: 8	Expected: 2
    +
    +- Glyph name: uni0136	Contours detected: 7	Expected: 2 or 3
    +
    +- Glyph name: uni013B	Contours detected: 8	Expected: 2
    +
    +- Glyph name: uni013C	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni0145	Contours detected: 8	Expected: 2
    +
    +- Glyph name: uni0156	Contours detected: 6	Expected: 3
    +
    +- Glyph name: uni0162	Contours detected: 5	Expected: 1 or 2
    +
    +- Glyph name: uni1E9E	Contours detected: 16	Expected: 1
    +
    +- Glyph name: uni1EA0	Contours detected: 7	Expected: 3
    +
    +- Glyph name: uni1EA1	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni1EA2	Contours detected: 7	Expected: 3
    +
    +- Glyph name: uni1EA3	Contours detected: 2	Expected: 3
    +
    +- Glyph name: uni1EA4	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EA5	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EA6	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EA7	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EA8	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EA9	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EAA	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EAB	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EAC	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EAD	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EAE	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EAF	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EB0	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EB1	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EB2	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EB3	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EB4	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EB5	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EB6	Contours detected: 8	Expected: 4
    +
    +- Glyph name: uni1EB7	Contours detected: 3	Expected: 4
    +
    +- Glyph name: uni1EB8	Contours detected: 6	Expected: 2
    +
    +- Glyph name: uni1EBA	Contours detected: 6	Expected: 2
    +
    +- Glyph name: uni1EBC	Contours detected: 6	Expected: 2
    +
    +- Glyph name: uni1EBE	Contours detected: 7	Expected: 3
    +
    +- Glyph name: uni1EC0	Contours detected: 7	Expected: 3
    +
    +- Glyph name: uni1EC2	Contours detected: 7	Expected: 3
    +
    +- Glyph name: uni1EC4	Contours detected: 7	Expected: 3
    +
    +- Glyph name: uni1EC6	Contours detected: 7	Expected: 3
    +
    +- Glyph name: uni1EC8	Contours detected: 6	Expected: 2
    +
    +- Glyph name: uni1ECA	Contours detected: 6	Expected: 2
    +
    +- Glyph name: uni1ECC	Contours detected: 8	Expected: 3
    +
    +- Glyph name: uni1ECE	Contours detected: 8	Expected: 3
    +
    +- Glyph name: uni1ED0	Contours detected: 9	Expected: 4
    +
    +- Glyph name: uni1ED2	Contours detected: 9	Expected: 4
    +
    +- Glyph name: uni1ED4	Contours detected: 9	Expected: 4
    +
    +- Glyph name: uni1ED6	Contours detected: 9	Expected: 4
    +
    +- Glyph name: uni1ED8	Contours detected: 9	Expected: 4
    +
    +- Glyph name: uni1EDA	Contours detected: 9	Expected: 3 or 4
    +
    +- Glyph name: uni1EDB	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni1EDC	Contours detected: 9	Expected: 3 or 4
    +
    +- Glyph name: uni1EDD	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni1EDE	Contours detected: 9	Expected: 3 or 4
    +
    +- Glyph name: uni1EDF	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni1EE0	Contours detected: 9	Expected: 3 or 4
    +
    +- Glyph name: uni1EE1	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni1EE2	Contours detected: 9	Expected: 3 or 4
    +
    +- Glyph name: uni1EE3	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni1EE4	Contours detected: 6	Expected: 2
    +
    +- Glyph name: uni1EE6	Contours detected: 6	Expected: 2
    +
    +- Glyph name: uni1EE8	Contours detected: 7	Expected: 2
    +
    +- Glyph name: uni1EE9	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni1EEA	Contours detected: 7	Expected: 2
    +
    +- Glyph name: uni1EEB	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni1EEC	Contours detected: 7	Expected: 2
    +
    +- Glyph name: uni1EED	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni1EEE	Contours detected: 7	Expected: 2
    +
    +- Glyph name: uni1EEF	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni1EF0	Contours detected: 7	Expected: 2
    +
    +- Glyph name: uni1EF1	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni1EF4	Contours detected: 8	Expected: 2
    +
    +- Glyph name: uni1EF5	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni1EF6	Contours detected: 8	Expected: 2
    +
    +- Glyph name: uni1EF7	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni1EF8	Contours detected: 8	Expected: 2
    +
    +- Glyph name: uni1EF9	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uogonek	Contours detected: 2	Expected: 1
    +
    +- Glyph name: y	Contours detected: 2	Expected: 1
    +
    +- Glyph name: yacute	Contours detected: 3	Expected: 2
    +
    +- Glyph name: ycircumflex	Contours detected: 3	Expected: 2
    +
    +- Glyph name: ydieresis	Contours detected: 4	Expected: 3
    +
    +- Glyph name: ygrave	Contours detected: 3	Expected: 2
    +
    +- Glyph name: zero	Contours detected: 1	Expected: 2 or 3
    +
    +

    [code: contour-count]

    +
+

Does the font contain a soft hyphen?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/soft_hyphen>
+ +
⚠️ LoversQuarrel-Regular.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+

Ensure component transforms do not perform scaling or rotation.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/transformed_components>
+ +
🔥 LoversQuarrel-Regular.ttf
  • 🔥 FAIL

    The following glyphs had components with scaling or rotation +or inverted outline direction:

    +
      +
    • questiondown (component question)
    • +
    • exclamdown (component exclam)
    • +
    • Ccedilla (component cedilla)
    • +
    • ccedilla (component cedilla)
    • +
    • Lslash (component hyphen)
    • +
    • Ohungarumlaut (component hungarumlaut)
    • +
    • Scedilla (component cedilla)
    • +
    • Tbar (component hyphen)
    • +
    • uni0162 (component cedilla)
    • +
    • Uhungarumlaut (component hungarumlaut)
    • +
    • uni0327 (component cedilla)
    • +
    • uni030B (component hungarumlaut)
    • +
    • uni030B.case (component hungarumlaut)
    • +
    • ldot (component periodcentered)
    • +
    • ohungarumlaut (component hungarumlaut)
    • +
    • scedilla (component cedilla)
    • +
    • uni0163 (component cedilla)
    • +
    • uhungarumlaut (component hungarumlaut) +[code: transformed-components]
    • +
    +
+

Check math signs have the same width.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/math_signs_width>
+ +
⚠️ LoversQuarrel-Regular.ttf
  • ⚠️ WARN

    The most common width is 305 among a set of 2 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 219: +less, greater

    +

    Width = 746: +logicalnot

    +

    Width = 423: +plusminus, notequal

    +

    Width = 221: +multiply

    +

    Width = 283: +divide

    +

    Width = 344: +minus

    +

    Width = 249: +approxequal

    +

    Width = 232: +lessequal, greaterequal +[code: width-outliers]

    +
+

Section: fontbakery.profiles.dsig

+⚠️ +

Does the font have a DSIG table?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/dsig>
+ +
⚠️ LoversQuarrel-Regular.ttf
  • ⚠️ WARN

    This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly. +The current recommendation is to completely remove the DSIG table. [code: found-DSIG]

    +
+

Section: Shaping Checks

+⚠️⚠️⏩⏩⏩ +

Ensure dotted circle glyph is present and can attach marks.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/dotted_circle>
+ +
⚠️ LoversQuarrel-Regular.ttf
  • ⚠️ WARN

    No dotted circle glyph present [code: missing-dotted-circle]

    +
+

Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/soft_dotted>
+ +
⚠️ LoversQuarrel-Regular.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: į̀ į́ į̂ į̃ į̄ į̌ ị̀ ị́ ị̂ ị̃ ị̄

    +

    The dot of soft dotted characters should disappear in other cases, for example: ĭ̦ i̦̇ i̦̊ i̦̋ ǐ̦ i̦̒ j̦̀ j̦́ j̦̃ j̦̄ j̦̆ j̦̇ j̦̈ j̦̉ j̦̊ j̦̋ ǰ̦ j̦̒ į̆ į̇

    +

    Your font fully covers the following languages that require the soft-dotted feature: Dutch (Latn, 31,709,104 speakers).

    +

    Your font does not cover the following languages that require the soft-dotted feature: Nateni (Latn, 100,000 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Aghem (Latn, 38,843 speakers), Lugbara (Latn, 2,200,000 speakers), Dan (Latn, 1,099,244 speakers), Navajo (Latn, 166,319 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Belarusian (Cyrl, 10,064,517 speakers), Ejagham (Latn, 120,000 speakers), Avokaya (Latn, 100,000 speakers), Igbo (Latn, 27,823,640 speakers), Ebira (Latn, 2,200,000 speakers), Basaa (Latn, 332,940 speakers), Ma’di (Latn, 584,000 speakers), Lithuanian (Latn, 2,357,094 speakers). [code: soft-dotted]

    +
+
+ + \ No newline at end of file diff --git a/docs/fontbakery-reports/loversquarrel-report.json b/docs/fontbakery-reports/loversquarrel-report.json new file mode 100644 index 00000000..fcfa2708 --- /dev/null +++ b/docs/fontbakery-reports/loversquarrel-report.json @@ -0,0 +1,5694 @@ +{ + "result": { + "FAIL": 4, + "INFO": 8, + "PASS": 155, + "SKIP": 60, + "WARN": 14 + }, + "sections": [ + { + "checks": [ + { + "description": "Ensure that all variable font files have the same set of axes and axis ranges.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: VFs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n In order to facilitate the construction of intuitive and friendly user\n interfaces, all variable font files in a given family should have the same set\n of variation axes. Also, each axis must have a consistent setting of min/max\n value ranges accross all the files.\n ", + "result": "SKIP" + }, + { + "description": "All tabular figures must have the same width across the RIBBI-family.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tabular figures need to have the same metrics in all styles in order to allow\n tables to be set with proper typographic control, but to maintain the placement\n of decimals and numeric columns between rows.\n\n Here's a good explanation of this:\n https://www.typography.com/techniques/fonts-for-financials/#tabular-figs\n ", + "result": "PASS" + }, + { + "description": "Does font file include unacceptable control character glyphs?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Unacceptable control characters were not identified.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Use of some unacceptable control characters in the U+0000 - U+001F range can\n lead to rendering issues on some platforms.\n\n Acceptable control characters are defined as .null (U+0000) and\n CR (U+000D) for this test.\n ", + "result": "PASS" + }, + { + "description": "Ensure Italic styles have Roman counterparts.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For each font family on Google Fonts, every Italic style must have\n a Roman sibling.\n\n This kind of problem was first observed at [1] where the Bold style was\n missing but BoldItalic was included.\n\n [1] https://github.com/google/fonts/pull/1482\n ", + "result": "PASS" + }, + { + "description": "Check axis ordering on the STAT table.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "From a total of 1 font files, 1 of them (100.00%) lack a STAT table.\n\n\tAnd these are the most common STAT axis orderings:\n\t [code: summary]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is (for now) a merely informative check to detect what's the axis ordering\n declared on the STAT table of fonts in the Google Fonts collection.\n\n We may later update this to enforce some unified axis ordering scheme,\n yet to be determined.\n ", + "result": "INFO" + }, + { + "description": "Check README.md has a sample image.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: readme_contents, readme_directory", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n In order to showcase what a font family looks like, the project's README.md\n file should ideally include a sample image and highlight it in the upper\n portion of the document, no more than 10 lines away from the top of the file.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"LoversQuarrel-Regular.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Found a git repo URL: https://github.com/googlefonts/lovers-quarrel [code: url-found]", + "status": "INFO", + "traceback": null + }, + { + "message": "Looks great!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "INFO" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID 'GOOG' looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "PASS" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Missing required codepoints:\n\n\t- 0x010A (LATIN CAPITAL LETTER C WITH DOT ABOVE)\n\n\n\t- 0x011E (LATIN CAPITAL LETTER G WITH BREVE)\n\n\n\t- 0x0120 (LATIN CAPITAL LETTER G WITH DOT ABOVE)\n\n\n\t- 0x0126 (LATIN CAPITAL LETTER H WITH STROKE)\n\n\n\t- 0x0130 (LATIN CAPITAL LETTER I WITH DOT ABOVE)\n\n\n\t- 0x0218 (LATIN CAPITAL LETTER S WITH COMMA BELOW)\n\n\n\t- 0x021A (LATIN CAPITAL LETTER T WITH COMMA BELOW)\n\n\n\t- 0x016C (LATIN CAPITAL LETTER U WITH BREVE)\n\n\n\t- 0x010B (LATIN SMALL LETTER C WITH DOT ABOVE)\n\n\n\t- 0x011F (LATIN SMALL LETTER G WITH BREVE)\n\n\n\t- 0x0121 (LATIN SMALL LETTER G WITH DOT ABOVE)\n\n\n\t- 0x0219 (LATIN SMALL LETTER S WITH COMMA BELOW)\n\n\n\t- 0x021B (LATIN SMALL LETTER T WITH COMMA BELOW)\n\n\n\t- 0x016D (LATIN SMALL LETTER U WITH BREVE)\n [code: missing-codepoints]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "FAIL" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+02C7 CARON: try adding one of: canadian-aboriginal, tifinagh, yi\n * U+02D8 BREVE: try adding one of: canadian-aboriginal, yi\n * U+02D9 DOT ABOVE: try adding one of: canadian-aboriginal, yi\n * U+02DB OGONEK: try adding one of: canadian-aboriginal, yi\n * U+02DD DOUBLE ACUTE ACCENT: not included in any glyphset definition\n * U+0302 COMBINING CIRCUMFLEX ACCENT: try adding one of: cherokee, tifinagh, math, coptic\n * U+0306 COMBINING BREVE: try adding one of: old-permic, tifinagh\n * U+0307 COMBINING DOT ABOVE: try adding one of: syriac, old-permic, tai-le, malayalam, math, coptic, canadian-aboriginal, tifinagh\n * U+030A COMBINING RING ABOVE: try adding syriac\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: cherokee, osage\n * U+030C COMBINING CARON: try adding one of: cherokee, tai-le\n * U+0312 COMBINING TURNED COMMA ABOVE: not included in any glyphset definition\n * U+031B COMBINING HORN: not included in any glyphset definition\n * U+0326 COMBINING COMMA BELOW: not included in any glyphset definition\n * U+0327 COMBINING CEDILLA: not included in any glyphset definition\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+03A9 GREEK CAPITAL LETTER OMEGA: try adding one of: greek, math, elbasan\n * U+03BC GREEK SMALL LETTER MU: try adding one of: greek, math\n * U+03C0 GREEK SMALL LETTER PI: try adding one of: greek, math, yi\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+2202 PARTIAL DIFFERENTIAL: try adding math\n * U+2206 INCREMENT: try adding math\n * U+220F N-ARY PRODUCT: try adding math\n * U+2211 N-ARY SUMMATION: try adding math\n * U+221A SQUARE ROOT: try adding math\n * U+221E INFINITY: try adding math\n * U+222B INTEGRAL: try adding math\n * U+2248 ALMOST EQUAL TO: try adding math\n * U+2260 NOT EQUAL TO: try adding math\n * U+2264 LESS-THAN OR EQUAL TO: try adding math\n * U+2265 GREATER-THAN OR EQUAL TO: try adding math\n * U+25CA LOZENGE: try adding one of: symbols, math\n * U+F8FF : not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n\nOr you can add the above codepoints to one of the subsets supported by the font: `latin`, `latin-ext`, `menu`, `vietnamese` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "looks good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The OFL.txt body text is incorrect. Please use https://github.com/googlefonts/Unified-Font-Repository/blob/main/OFL.txt as a template. You should only modify the first line. [code: incorrect-ofl-body-text]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Licensing entry on name table is correctly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "PASS" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has a valid license URL in NAME table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All description name records have reasonably small lengths.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "PASS" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 67.0kb |\n | Hinted Size | 107.8kb |\n | Increase | 40.9kb |\n | Change | 61.0 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font had a reasonable file size", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "ttfautohint used in font = 1.8.3; latest = 1.8.4; Need to re-run with the newer version! [code: old-ttfa]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "WARN" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0F\n\t- Use grid-fitting\n\t- Use grayscale rendering\n\t- Use gridfitting with ClearType symmetric smoothing\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The 'gasp' table is correctly set, with one gaspRange:value of 0xFFFF:0x0F.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "INFO" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Lovers Quarrel\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"LoversQuarrel-Regular\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Lovers Quarrel Regular\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Lovers Quarrel\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Lovers Quarrel\" in \"Lovers Quarrel Regular\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb copyright string is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright field 'Copyright 2004 The Lovers Quarrel Project Authors (https://github.com/googlefonts/lovers-quarrel)' matches canonical pattern.", + "status": "PASS", + "traceback": null + }, + { + "message": "Name table copyright entries are good", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb copyright field does not contain \"Reserved Font Name\".", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to italic fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.style \"normal\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: https://github.com/googlefonts/lovers-quarrel\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "PASS" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 1000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs are similar in comparison to the Google Fonts version.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Lovers Quarrel | Lovers Quarrel |\n| Subfamily Name | Regular | Regular |\n| Full Name | Lovers Quarrel Regular | Lovers Quarrel Regular |\n| Poscript Name | LoversQuarrel-Regular | LoversQuarrel-Regular |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 1.010; ttfautohint (v1.8.3)\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "'prep' table contains instructions enabling smart dropout control.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "PASS" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "PASS" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font lacks caret position values for ligature glyphs on its GDEF table. [code: lacks-caret-pos]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "WARN" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "GPOS table lacks kerning info for the following non-ligated sequences:\n\n\t- f + i\n\n\t- i + l [code: lacks-kern-info]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "WARN" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "None of the name table strings contain \"Reserved Font Name\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "PASS" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The upstream.yaml file contains all necessary fields", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Vertical metrics have not regressed.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font, not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_claiming_to_be_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "PASS" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "PASS" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"loversquarrel\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Lovers Quarrel)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "FAIL": 3, + "INFO": 6, + "PASS": 97, + "SKIP": 24, + "WARN": 7 + } + }, + { + "checks": [ + { + "description": "Checking all files are in the same directory.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "All files are in the same directory.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the set of font files passed in the command line is not all in the\n same directory, then we warn the user since the tool will interpret the\n set of files as belonging to a single family (and it is unlikely that\n the user would store the files from a single family spreaded\n in several separate directories).\n ", + "result": "PASS" + }, + { + "description": "Each font in a family must have the same set of vertical metrics values.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Vertical metrics are the same across the family.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want all fonts within a family to have the same vertical metrics so\n their line spacing is consistent across the family.\n ", + "result": "PASS" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No trailing spaces on name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWinAscent & usWinDescent values look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2.sTypoAscender/Descender values match hhea.ascent/descent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "PASS" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has **AGL recommended** names for whitespace glyphs.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "PASS" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- cvt \n\n\t- fpgm\n\n\t- loca\n\n\t- prep\n\n\t- GPOS\n\n\t- GSUB\n\n\t- gasp [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyph names are all valid.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "PASS" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyph names are all unique.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "PASS" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- NULL\n\n\t- RS\n\n\t- US\n\n\t- _229\n\n\t- caron.alt\n\n\t- uni0326.001\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: percent\tContours detected: 4\tExpected: 5\n\n\t- Glyph name: ampersand\tContours detected: 9\tExpected: 1, 2 or 3\n\n\t- Glyph name: zero\tContours detected: 1\tExpected: 2 or 3\n\n\t- Glyph name: A\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: B\tContours detected: 7\tExpected: 2 or 3\n\n\t- Glyph name: C\tContours detected: 4\tExpected: 1\n\n\t- Glyph name: D\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: E\tContours detected: 5\tExpected: 1\n\n\t- Glyph name: F\tContours detected: 4\tExpected: 1\n\n\t- Glyph name: G\tContours detected: 7\tExpected: 1\n\n\t- Glyph name: H\tContours detected: 5\tExpected: 1\n\n\t- Glyph name: I\tContours detected: 5\tExpected: 1\n\n\t- Glyph name: J\tContours detected: 3\tExpected: 1\n\n\t- Glyph name: K\tContours detected: 6\tExpected: 1 or 2\n\n\t- Glyph name: L\tContours detected: 7\tExpected: 1\n\n\t- Glyph name: M\tContours detected: 9\tExpected: 1\n\n\t- Glyph name: N\tContours detected: 7\tExpected: 1\n\n\t- Glyph name: O\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: P\tContours detected: 9\tExpected: 1 or 2\n\n\t- Glyph name: Q\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: R\tContours detected: 5\tExpected: 1 or 2\n\n\t- Glyph name: S\tContours detected: 8\tExpected: 1\n\n\t- Glyph name: T\tContours detected: 4\tExpected: 1\n\n\t- Glyph name: U\tContours detected: 5\tExpected: 1\n\n\t- Glyph name: V\tContours detected: 4\tExpected: 1\n\n\t- Glyph name: W\tContours detected: 5\tExpected: 1 or 2\n\n\t- Glyph name: X\tContours detected: 5\tExpected: 1\n\n\t- Glyph name: Y\tContours detected: 7\tExpected: 1\n\n\t- Glyph name: Z\tContours detected: 6\tExpected: 1\n\n\t- Glyph name: a\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: b\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: h\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: l\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: q\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: y\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: asciitilde\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: section\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: copyright\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni00AD\tContours detected: 1\tExpected: 0\n\n\t- Glyph name: registered\tContours detected: 5\tExpected: 3 or 4\n\n\t- Glyph name: Agrave\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Aacute\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Acircumflex\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Atilde\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Adieresis\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: Aring\tContours detected: 8\tExpected: 3 or 4\n\n\t- Glyph name: AE\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Ccedilla\tContours detected: 5\tExpected: 1 or 2\n\n\t- Glyph name: Egrave\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Eacute\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Ecircumflex\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Edieresis\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Igrave\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Iacute\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Icircumflex\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Idieresis\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Eth\tContours detected: 9\tExpected: 2\n\n\t- Glyph name: Ntilde\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: Ograve\tContours detected: 8\tExpected: 3\n\n\t- Glyph name: Oacute\tContours detected: 8\tExpected: 3\n\n\t- Glyph name: Ocircumflex\tContours detected: 8\tExpected: 3\n\n\t- Glyph name: Otilde\tContours detected: 8\tExpected: 3\n\n\t- Glyph name: Odieresis\tContours detected: 9\tExpected: 4\n\n\t- Glyph name: Oslash\tContours detected: 7\tExpected: 2 or 3\n\n\t- Glyph name: Ugrave\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Uacute\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Ucircumflex\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Udieresis\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Yacute\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: agrave\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: aacute\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: acircumflex\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: atilde\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: adieresis\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: aring\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: yacute\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: ydieresis\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: Amacron\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: amacron\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: Abreve\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: abreve\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: Aogonek\tContours detected: 7\tExpected: 2 or 3\n\n\t- Glyph name: Cacute\tContours detected: 5\tExpected: 2\n\n\t- Glyph name: Ccaron\tContours detected: 5\tExpected: 2\n\n\t- Glyph name: Dcaron\tContours detected: 9\tExpected: 3\n\n\t- Glyph name: Dcroat\tContours detected: 9\tExpected: 2\n\n\t- Glyph name: Emacron\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Edotaccent\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Eogonek\tContours detected: 6\tExpected: 1 or 2\n\n\t- Glyph name: eogonek\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: Ecaron\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: uni0122\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: hbar\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: Itilde\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Imacron\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Iogonek\tContours detected: 6\tExpected: 1 or 2\n\n\t- Glyph name: IJ\tContours detected: 7\tExpected: 1 or 2\n\n\t- Glyph name: Jcircumflex\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: uni0136\tContours detected: 7\tExpected: 2 or 3\n\n\t- Glyph name: Lacute\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: lacute\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni013B\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: uni013C\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: Lcaron\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: lcaron\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: Ldotaccent\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: ldot\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: Lslash\tContours detected: 8\tExpected: 1\n\n\t- Glyph name: lslash\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: Nacute\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: uni0145\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: Ncaron\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: Eng\tContours detected: 7\tExpected: 1\n\n\t- Glyph name: Omacron\tContours detected: 8\tExpected: 3\n\n\t- Glyph name: Ohungarumlaut\tContours detected: 9\tExpected: 4\n\n\t- Glyph name: OE\tContours detected: 9\tExpected: 2\n\n\t- Glyph name: Racute\tContours detected: 6\tExpected: 3\n\n\t- Glyph name: uni0156\tContours detected: 6\tExpected: 3\n\n\t- Glyph name: Rcaron\tContours detected: 6\tExpected: 3\n\n\t- Glyph name: Sacute\tContours detected: 9\tExpected: 2\n\n\t- Glyph name: Scedilla\tContours detected: 9\tExpected: 1 or 2\n\n\t- Glyph name: Scaron\tContours detected: 9\tExpected: 2\n\n\t- Glyph name: uni0162\tContours detected: 5\tExpected: 1 or 2\n\n\t- Glyph name: Tcaron\tContours detected: 5\tExpected: 2\n\n\t- Glyph name: Tbar\tContours detected: 5\tExpected: 1\n\n\t- Glyph name: Utilde\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Umacron\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Uring\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Uhungarumlaut\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Uogonek\tContours detected: 6\tExpected: 1\n\n\t- Glyph name: uogonek\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: Wcircumflex\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Ycircumflex\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: ycircumflex\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: Ydieresis\tContours detected: 9\tExpected: 3\n\n\t- Glyph name: Zacute\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: Zdotaccent\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: Zcaron\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: Ohorn\tContours detected: 8\tExpected: 2 or 3\n\n\t- Glyph name: ohorn\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: Uhorn\tContours detected: 6\tExpected: 1\n\n\t- Glyph name: uhorn\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: Wgrave\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Wacute\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Wdieresis\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: uni1E9E\tContours detected: 16\tExpected: 1\n\n\t- Glyph name: uni1EA0\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: uni1EA1\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni1EA2\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: uni1EA3\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni1EA4\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EA5\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EA6\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EA7\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EA8\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EA9\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EAA\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EAB\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EAC\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EAD\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EAE\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EAF\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EB0\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EB1\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EB2\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EB3\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EB4\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EB5\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EB6\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EB7\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EB8\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: uni1EBA\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: uni1EBC\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: uni1EBE\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: uni1EC0\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: uni1EC2\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: uni1EC4\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: uni1EC6\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: uni1EC8\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: uni1ECA\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: uni1ECC\tContours detected: 8\tExpected: 3\n\n\t- Glyph name: uni1ECE\tContours detected: 8\tExpected: 3\n\n\t- Glyph name: uni1ED0\tContours detected: 9\tExpected: 4\n\n\t- Glyph name: uni1ED2\tContours detected: 9\tExpected: 4\n\n\t- Glyph name: uni1ED4\tContours detected: 9\tExpected: 4\n\n\t- Glyph name: uni1ED6\tContours detected: 9\tExpected: 4\n\n\t- Glyph name: uni1ED8\tContours detected: 9\tExpected: 4\n\n\t- Glyph name: uni1EDA\tContours detected: 9\tExpected: 3 or 4\n\n\t- Glyph name: uni1EDB\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni1EDC\tContours detected: 9\tExpected: 3 or 4\n\n\t- Glyph name: uni1EDD\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni1EDE\tContours detected: 9\tExpected: 3 or 4\n\n\t- Glyph name: uni1EDF\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni1EE0\tContours detected: 9\tExpected: 3 or 4\n\n\t- Glyph name: uni1EE1\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni1EE2\tContours detected: 9\tExpected: 3 or 4\n\n\t- Glyph name: uni1EE3\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni1EE4\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: uni1EE6\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: uni1EE8\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: uni1EE9\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni1EEA\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: uni1EEB\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni1EEC\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: uni1EED\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni1EEE\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: uni1EEF\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni1EF0\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: uni1EF1\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: Ygrave\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: ygrave\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni1EF4\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: uni1EF5\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni1EF6\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: uni1EF7\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni1EF8\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: uni1EF9\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: trademark\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: fl\tContours detected: 3\tExpected: 1 or 2\n\n\t- Glyph name: A\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: AE\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Aacute\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Abreve\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Acircumflex\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Adieresis\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: Agrave\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Amacron\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Aogonek\tContours detected: 7\tExpected: 2 or 3\n\n\t- Glyph name: Aring\tContours detected: 8\tExpected: 3 or 4\n\n\t- Glyph name: Atilde\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: B\tContours detected: 7\tExpected: 2 or 3\n\n\t- Glyph name: C\tContours detected: 4\tExpected: 1\n\n\t- Glyph name: Cacute\tContours detected: 5\tExpected: 2\n\n\t- Glyph name: Ccaron\tContours detected: 5\tExpected: 2\n\n\t- Glyph name: Ccedilla\tContours detected: 5\tExpected: 1 or 2\n\n\t- Glyph name: D\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: Dcaron\tContours detected: 9\tExpected: 3\n\n\t- Glyph name: Dcroat\tContours detected: 9\tExpected: 2\n\n\t- Glyph name: E\tContours detected: 5\tExpected: 1\n\n\t- Glyph name: Eacute\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Ecaron\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Ecircumflex\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Edieresis\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Edotaccent\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Egrave\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Emacron\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Eng\tContours detected: 7\tExpected: 1\n\n\t- Glyph name: Eogonek\tContours detected: 6\tExpected: 1 or 2\n\n\t- Glyph name: Eth\tContours detected: 9\tExpected: 2\n\n\t- Glyph name: F\tContours detected: 4\tExpected: 1\n\n\t- Glyph name: G\tContours detected: 7\tExpected: 1\n\n\t- Glyph name: H\tContours detected: 5\tExpected: 1\n\n\t- Glyph name: I\tContours detected: 5\tExpected: 1\n\n\t- Glyph name: IJ\tContours detected: 7\tExpected: 1 or 2\n\n\t- Glyph name: Iacute\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Icircumflex\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Idieresis\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Igrave\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Imacron\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Iogonek\tContours detected: 6\tExpected: 1 or 2\n\n\t- Glyph name: Itilde\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: J\tContours detected: 3\tExpected: 1\n\n\t- Glyph name: Jcircumflex\tContours detected: 4\tExpected: 2\n\n\t- Glyph name: K\tContours detected: 6\tExpected: 1 or 2\n\n\t- Glyph name: L\tContours detected: 7\tExpected: 1\n\n\t- Glyph name: Lacute\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: Lcaron\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: Lslash\tContours detected: 8\tExpected: 1\n\n\t- Glyph name: M\tContours detected: 9\tExpected: 1\n\n\t- Glyph name: N\tContours detected: 7\tExpected: 1\n\n\t- Glyph name: Nacute\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: Ncaron\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: Ntilde\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: O\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: OE\tContours detected: 9\tExpected: 2\n\n\t- Glyph name: Oacute\tContours detected: 8\tExpected: 3\n\n\t- Glyph name: Ocircumflex\tContours detected: 8\tExpected: 3\n\n\t- Glyph name: Odieresis\tContours detected: 9\tExpected: 4\n\n\t- Glyph name: Ograve\tContours detected: 8\tExpected: 3\n\n\t- Glyph name: Ohorn\tContours detected: 8\tExpected: 2 or 3\n\n\t- Glyph name: Ohungarumlaut\tContours detected: 9\tExpected: 4\n\n\t- Glyph name: Omacron\tContours detected: 8\tExpected: 3\n\n\t- Glyph name: Oslash\tContours detected: 7\tExpected: 2 or 3\n\n\t- Glyph name: Otilde\tContours detected: 8\tExpected: 3\n\n\t- Glyph name: P\tContours detected: 9\tExpected: 1 or 2\n\n\t- Glyph name: Q\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: R\tContours detected: 5\tExpected: 1 or 2\n\n\t- Glyph name: Racute\tContours detected: 6\tExpected: 3\n\n\t- Glyph name: Rcaron\tContours detected: 6\tExpected: 3\n\n\t- Glyph name: S\tContours detected: 8\tExpected: 1\n\n\t- Glyph name: Sacute\tContours detected: 9\tExpected: 2\n\n\t- Glyph name: Scaron\tContours detected: 9\tExpected: 2\n\n\t- Glyph name: T\tContours detected: 4\tExpected: 1\n\n\t- Glyph name: Tbar\tContours detected: 5\tExpected: 1\n\n\t- Glyph name: Tcaron\tContours detected: 5\tExpected: 2\n\n\t- Glyph name: U\tContours detected: 5\tExpected: 1\n\n\t- Glyph name: Uacute\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Ucircumflex\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Udieresis\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Ugrave\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Uhorn\tContours detected: 6\tExpected: 1\n\n\t- Glyph name: Uhungarumlaut\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Umacron\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Uogonek\tContours detected: 6\tExpected: 1\n\n\t- Glyph name: Uring\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Utilde\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: V\tContours detected: 4\tExpected: 1\n\n\t- Glyph name: W\tContours detected: 5\tExpected: 1 or 2\n\n\t- Glyph name: Wacute\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Wcircumflex\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: Wdieresis\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: Wgrave\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: X\tContours detected: 5\tExpected: 1\n\n\t- Glyph name: Y\tContours detected: 7\tExpected: 1\n\n\t- Glyph name: Yacute\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: Ycircumflex\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: Ydieresis\tContours detected: 9\tExpected: 3\n\n\t- Glyph name: Ygrave\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: Z\tContours detected: 6\tExpected: 1\n\n\t- Glyph name: Zacute\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: Zcaron\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: Zdotaccent\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: a\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: aacute\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: abreve\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: acircumflex\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: adieresis\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: agrave\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: amacron\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: ampersand\tContours detected: 9\tExpected: 1, 2 or 3\n\n\t- Glyph name: aring\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: asciitilde\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: atilde\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: b\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: copyright\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: eogonek\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: fi\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: fl\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: h\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: hbar\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: l\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: lacute\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: lcaron\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: ldot\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: lslash\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: ohorn\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: percent\tContours detected: 4\tExpected: 5\n\n\t- Glyph name: q\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: registered\tContours detected: 5\tExpected: 3 or 4\n\n\t- Glyph name: section\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: trademark\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: uhorn\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: uni00AD\tContours detected: 1\tExpected: 0\n\n\t- Glyph name: uni0122\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: uni0136\tContours detected: 7\tExpected: 2 or 3\n\n\t- Glyph name: uni013B\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: uni013C\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni0145\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: uni0156\tContours detected: 6\tExpected: 3\n\n\t- Glyph name: uni0162\tContours detected: 5\tExpected: 1 or 2\n\n\t- Glyph name: uni1E9E\tContours detected: 16\tExpected: 1\n\n\t- Glyph name: uni1EA0\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: uni1EA1\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni1EA2\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: uni1EA3\tContours detected: 2\tExpected: 3\n\n\t- Glyph name: uni1EA4\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EA5\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EA6\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EA7\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EA8\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EA9\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EAA\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EAB\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EAC\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EAD\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EAE\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EAF\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EB0\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EB1\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EB2\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EB3\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EB4\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EB5\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EB6\tContours detected: 8\tExpected: 4\n\n\t- Glyph name: uni1EB7\tContours detected: 3\tExpected: 4\n\n\t- Glyph name: uni1EB8\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: uni1EBA\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: uni1EBC\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: uni1EBE\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: uni1EC0\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: uni1EC2\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: uni1EC4\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: uni1EC6\tContours detected: 7\tExpected: 3\n\n\t- Glyph name: uni1EC8\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: uni1ECA\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: uni1ECC\tContours detected: 8\tExpected: 3\n\n\t- Glyph name: uni1ECE\tContours detected: 8\tExpected: 3\n\n\t- Glyph name: uni1ED0\tContours detected: 9\tExpected: 4\n\n\t- Glyph name: uni1ED2\tContours detected: 9\tExpected: 4\n\n\t- Glyph name: uni1ED4\tContours detected: 9\tExpected: 4\n\n\t- Glyph name: uni1ED6\tContours detected: 9\tExpected: 4\n\n\t- Glyph name: uni1ED8\tContours detected: 9\tExpected: 4\n\n\t- Glyph name: uni1EDA\tContours detected: 9\tExpected: 3 or 4\n\n\t- Glyph name: uni1EDB\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni1EDC\tContours detected: 9\tExpected: 3 or 4\n\n\t- Glyph name: uni1EDD\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni1EDE\tContours detected: 9\tExpected: 3 or 4\n\n\t- Glyph name: uni1EDF\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni1EE0\tContours detected: 9\tExpected: 3 or 4\n\n\t- Glyph name: uni1EE1\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni1EE2\tContours detected: 9\tExpected: 3 or 4\n\n\t- Glyph name: uni1EE3\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni1EE4\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: uni1EE6\tContours detected: 6\tExpected: 2\n\n\t- Glyph name: uni1EE8\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: uni1EE9\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni1EEA\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: uni1EEB\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni1EEC\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: uni1EED\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni1EEE\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: uni1EEF\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni1EF0\tContours detected: 7\tExpected: 2\n\n\t- Glyph name: uni1EF1\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni1EF4\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: uni1EF5\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni1EF6\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: uni1EF7\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni1EF8\tContours detected: 8\tExpected: 2\n\n\t- Glyph name: uni1EF9\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uogonek\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: y\tContours detected: 2\tExpected: 1\n\n\t- Glyph name: yacute\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: ycircumflex\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: ydieresis\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: ygrave\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: zero\tContours detected: 1\tExpected: 2 or 3\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "SKIP" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs had components with scaling or rotation\nor inverted outline direction:\n\n* questiondown (component question)\n* exclamdown (component exclam)\n* Ccedilla (component cedilla)\n* ccedilla (component cedilla)\n* Lslash (component hyphen)\n* Ohungarumlaut (component hungarumlaut)\n* Scedilla (component cedilla)\n* Tbar (component hyphen)\n* uni0162 (component cedilla)\n* Uhungarumlaut (component hungarumlaut)\n* uni0327 (component cedilla)\n* uni030B (component hungarumlaut)\n* uni030B.case (component hungarumlaut)\n* ldot (component periodcentered)\n* ohungarumlaut (component hungarumlaut)\n* scedilla (component cedilla)\n* uni0163 (component cedilla)\n* uhungarumlaut (component hungarumlaut)\n [code: transformed-components]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "FAIL" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 305 among a set of 2 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 219:\nless, greater\n\nWidth = 746:\nlogicalnot\n\nWidth = 423:\nplusminus, notequal\n\nWidth = 221:\nmultiply\n\nWidth = 283:\ndivide\n\nWidth = 344:\nminus\n\nWidth = 249:\napproxequal\n\nWidth = 232:\nlessequal, greaterequal\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "FAIL": 1, + "INFO": 2, + "PASS": 20, + "SKIP": 6, + "WARN": 4 + } + }, + { + "checks": [ + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 3 + } + }, + { + "checks": [ + { + "description": "Fonts have equal unicode encodings?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have equal unicode encodings.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "Make sure all font files have the same version value.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "All font files have the same version.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3, + "SKIP": 1 + } + }, + { + "checks": [ + { + "description": "Fonts have consistent PANOSE proportion?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent PANOSE proportion.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Fonts have consistent PANOSE family type?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent PANOSE family type.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that OS/2.fsSelection bold & italic settings are unique for each NameID1", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "The OS/2.fsSelection bold & italic settings were unique within each compatible family group.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec: name ID 1 'is used in combination with Font Subfamily\n name (name ID 2), and should be shared among at most four fonts that differ\n only in weight or style.\n\n This four-way distinction should also be reflected in the OS/2.fsSelection\n field, using bits 0 and 5.\n ", + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 7, + "SKIP": 1 + } + }, + { + "checks": [ + { + "description": "Fonts have consistent underline thickness?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent underline thickness.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Dave C Lemon (Adobe Type Team) recommends setting the underline thickness to be\n consistent across the family.\n\n If thicknesses are not family consistent, words set on the same line which have\n different styles look strange.\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has an acceptable post format 2.0 table version.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "PASS" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is 0.0 with style=\"Regular\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3 + } + }, + { + "checks": [ + { + "description": "Verify that each group of fonts with the same nameID 1 has maximum of 4 fonts.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "There were no more than 4 fonts per family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec:\n\n 'The Font Family name [...] should be shared among at most four fonts that\n differ only in weight or style [...]'\n ", + "result": "PASS" + }, + { + "description": "Verify that family names in the name table are consistent across all fonts in the family. Checks Typographic Family name (nameID 16) if present, otherwise uses Font Family name (nameID 1)", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Font family names are consistent across the family.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec:\n * \"...many existing applications that use this pair of names assume that a\n Font Family name is shared by at most four fonts that form a font\n style-linking group\"\n * \"For extended typographic families that includes fonts other than the\n four basic styles(regular, italic, bold, bold italic), it is strongly\n recommended that name IDs 16 and 17 be used in fonts to create an\n extended, typographic grouping.\"\n * \"If name ID 16 is absent, then name ID 1 is considered to be the\n typographic family name.\"\n\n https://learn.microsoft.com/en-us/typography/opentype/spec/name\n\n Fonts within a font family all must have consistent names\n in the Typographic Family name (nameID 16)\n or Font Family name (nameID 1), depending on which it uses.\n\n Inconsistent font/typographic family names across fonts in a family\n can result in unexpected behaviors, such as broken style linking.\n ", + "result": "PASS" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font is not Italic.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 9, + "SKIP": 2 + } + }, + { + "checks": [ + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 2 + } + }, + { + "checks": [ + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly.\nThe current recommendation is to completely remove the DSIG table. [code: found-DSIG]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "WARN" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "WARN": 1 + } + }, + { + "checks": [ + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not has spacing glyphs in the GDEF mark glyph class.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "PASS" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not have mark characters not in the GDEF mark glyph class.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "PASS" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not have non-mark characters in the GDEF mark glyph class.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3 + } + }, + { + "checks": [ + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "GPOS table check for kerning information passed.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3 + } + }, + { + "checks": [ + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 16 + } + }, + { + "checks": [ + { + "description": "Ensure VFs have 'ital' STAT axis.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check that related Upright and Italic VFs have a\n 'ital' axis in STAT table.\n ", + "result": "PASS" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1, + "SKIP": 4 + } + }, + { + "checks": [ + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3 + } + }, + { + "checks": [ + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No dotted circle glyph present [code: missing-dotted-circle]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/loversquarrel/LoversQuarrel-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: \u012f\u0300 \u012f\u0301 \u012f\u0302 \u012f\u0303 \u012f\u0304 \u012f\u030c \u1ecb\u0300 \u1ecb\u0301 \u1ecb\u0302 \u1ecb\u0303 \u1ecb\u0304\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0326\u0306 i\u0326\u0307 i\u0326\u030a i\u0326\u030b i\u0326\u030c i\u0326\u0312 j\u0326\u0300 j\u0326\u0301 j\u0326\u0303 j\u0326\u0304 j\u0326\u0306 j\u0326\u0307 j\u0326\u0308 j\u0326\u0309 j\u0326\u030a j\u0326\u030b j\u0326\u030c j\u0326\u0312 \u012f\u0306 \u012f\u0307\n\nYour font fully covers the following languages that require the soft-dotted feature: Dutch (Latn, 31,709,104 speakers). \n\nYour font does *not* cover the following languages that require the soft-dotted feature: Nateni (Latn, 100,000 speakers), Koonzime (Latn, 40,000 speakers), Kom (Latn, 360,685 speakers), Aghem (Latn, 38,843 speakers), Lugbara (Latn, 2,200,000 speakers), Dan (Latn, 1,099,244 speakers), Navajo (Latn, 166,319 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Belarusian (Cyrl, 10,064,517 speakers), Ejagham (Latn, 120,000 speakers), Avokaya (Latn, 100,000 speakers), Igbo (Latn, 27,823,640 speakers), Ebira (Latn, 2,200,000 speakers), Basaa (Latn, 332,940 speakers), Ma\u2019di (Latn, 584,000 speakers), Lithuanian (Latn, 2,357,094 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 3, + "WARN": 2 + } + } + ] +} \ No newline at end of file diff --git a/docs/fontbakery-reports/loversquarrel/GoogleFonts.json b/docs/fontbakery-reports/loversquarrel/GoogleFonts.json new file mode 100644 index 00000000..848cf1a4 --- /dev/null +++ b/docs/fontbakery-reports/loversquarrel/GoogleFonts.json @@ -0,0 +1,7 @@ +{ + "color": "green", + "label": "Google Fonts", + "logoSvg": "", + "message": "87%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/loversquarrel/ShapingChecks.json b/docs/fontbakery-reports/loversquarrel/ShapingChecks.json new file mode 100644 index 00000000..1e5a3896 --- /dev/null +++ b/docs/fontbakery-reports/loversquarrel/ShapingChecks.json @@ -0,0 +1,7 @@ +{ + "color": "red", + "label": "Shaping Checks", + "logoSvg": "", + "message": "0%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/loversquarrel/Universal.json b/docs/fontbakery-reports/loversquarrel/Universal.json new file mode 100644 index 00000000..f2f4edb7 --- /dev/null +++ b/docs/fontbakery-reports/loversquarrel/Universal.json @@ -0,0 +1,7 @@ +{ + "color": "green", + "label": "Universal", + "logoSvg": "", + "message": "76%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/loversquarrel/overall.json b/docs/fontbakery-reports/loversquarrel/overall.json new file mode 100644 index 00000000..6b5caf89 --- /dev/null +++ b/docs/fontbakery-reports/loversquarrel/overall.json @@ -0,0 +1,7 @@ +{ + "color": "green", + "label": "FontBakery QA", + "logoSvg": "", + "message": "87%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/yujisyuku-report.html b/docs/fontbakery-reports/yujisyuku-report.html new file mode 100644 index 00000000..4d0270e6 --- /dev/null +++ b/docs/fontbakery-reports/yujisyuku-report.html @@ -0,0 +1,1968 @@ + + + + + FontBakery Check Report + + + +
+ +
+ Fontbakery Technical Report +
+
+ +
+

If you think a check is flawed or have an idea for a check, please file an issue at https://github.com/fonttools/fontbakery/issues and remember to include a pointer to the repo and branch you're checking.

+

Summary

+ + + + + + + + + + + + + + + + + + + + + + + + + +
💥 ERROR🔥 FAIL⚠️ WARN⏩ SKIPℹ️ INFO✅ PASS
0418678144
0%2%10%38%5%81%
+ +

Note: The following loglevels were omitted in this report: SKIP, INFO, PASS, DEBUG

+ +

Meaning of check results:

+ +
    +
  • 💥 An ERROR is something wrong with FontBakery itself, possibly a bug. +
  • 🔥 A FAIL is a problem with the font that must be fixed. +
  • ⚠️ A WARN is something that you should consider addressing. +
  • ℹ️ An INFO result simply prints something useful. Typically stats. +
  • ✅ A PASS means the font looks good for the given checking routine. +
  • ⏩ And a SKIP happens when the check does not apply to the given font. +
+ +

If you get ERRORs, please help us improve the tool by reporting them at our + issue tracker.

+ +

(but other kinds of bug reports and/or feature requests + are also always welcome, of course!)

+ +

FontBakery version: 0.9.2

+ +

Section: Google Fonts

+🔥🔥🔥🔥⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩⏩ℹ️ℹ️ℹ️ℹ️ℹ️ℹ️ +

Check Google Fonts glyph coverage.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/glyph_coverage>
+ +
🔥 YujiSyuku-Regular.ttf
  • 🔥 FAIL

    Missing required codepoints:

    +
    - 0x0300 (COMBINING GRAVE ACCENT)
    +
    +
    +- 0x0304 (COMBINING MACRON)
    +
    +
    +- 0x02D9 (DOT ABOVE)
    +
    +
    +- 0x0102 (LATIN CAPITAL LETTER A WITH BREVE)
    +
    +
    +- 0x0100 (LATIN CAPITAL LETTER A WITH MACRON)
    +
    +
    +- 0x0104 (LATIN CAPITAL LETTER A WITH OGONEK)
    +
    +
    +- 0x0106 (LATIN CAPITAL LETTER C WITH ACUTE)
    +
    +
    +- 0x010C (LATIN CAPITAL LETTER C WITH CARON)
    +
    +
    +- 0x010A (LATIN CAPITAL LETTER C WITH DOT ABOVE)
    +
    +
    +- 0x010E (LATIN CAPITAL LETTER D WITH CARON)
    +
    +
    +- 0x0110 (LATIN CAPITAL LETTER D WITH STROKE)
    +
    +
    +- 0x011A (LATIN CAPITAL LETTER E WITH CARON)
    +
    +
    +- 0x0116 (LATIN CAPITAL LETTER E WITH DOT ABOVE)
    +
    +
    +- 0x0112 (LATIN CAPITAL LETTER E WITH MACRON)
    +
    +
    +- 0x0118 (LATIN CAPITAL LETTER E WITH OGONEK)
    +
    +
    +- 0x011E (LATIN CAPITAL LETTER G WITH BREVE)
    +
    +
    +- 0x0122 (LATIN CAPITAL LETTER G WITH CEDILLA)
    +
    +
    +- 0x0120 (LATIN CAPITAL LETTER G WITH DOT ABOVE)
    +
    +
    +- 0x0126 (LATIN CAPITAL LETTER H WITH STROKE)
    +
    +
    +- 0x0130 (LATIN CAPITAL LETTER I WITH DOT ABOVE)
    +
    +
    +- 0x012A (LATIN CAPITAL LETTER I WITH MACRON)
    +
    +
    +- 0x012E (LATIN CAPITAL LETTER I WITH OGONEK)
    +
    +
    +- 0x0136 (LATIN CAPITAL LETTER K WITH CEDILLA)
    +
    +
    +- 0x0139 (LATIN CAPITAL LETTER L WITH ACUTE)
    +
    +
    +- 0x013D (LATIN CAPITAL LETTER L WITH CARON)
    +
    +
    +- 0x013B (LATIN CAPITAL LETTER L WITH CEDILLA)
    +
    +
    +- 0x0143 (LATIN CAPITAL LETTER N WITH ACUTE)
    +
    +
    +- 0x0147 (LATIN CAPITAL LETTER N WITH CARON)
    +
    +
    +- 0x0145 (LATIN CAPITAL LETTER N WITH CEDILLA)
    +
    +
    +- 0x014A (LATIN CAPITAL LETTER ENG)
    +
    +
    +- 0x0150 (LATIN CAPITAL LETTER O WITH DOUBLE ACUTE)
    +
    +
    +- 0x014C (LATIN CAPITAL LETTER O WITH MACRON)
    +
    +
    +- 0x0154 (LATIN CAPITAL LETTER R WITH ACUTE)
    +
    +
    +- 0x0158 (LATIN CAPITAL LETTER R WITH CARON)
    +
    +
    +- 0x0156 (LATIN CAPITAL LETTER R WITH CEDILLA)
    +
    +
    +- 0x015A (LATIN CAPITAL LETTER S WITH ACUTE)
    +
    +
    +- 0x015E (LATIN CAPITAL LETTER S WITH CEDILLA)
    +
    +
    +- 0x0218 (LATIN CAPITAL LETTER S WITH COMMA BELOW)
    +
    +
    +- 0x1E9E (LATIN CAPITAL LETTER SHARP S)
    +
    +
    +- 0x0164 (LATIN CAPITAL LETTER T WITH CARON)
    +
    +
    +- 0x021A (LATIN CAPITAL LETTER T WITH COMMA BELOW)
    +
    +
    +- 0x016C (LATIN CAPITAL LETTER U WITH BREVE)
    +
    +
    +- 0x0170 (LATIN CAPITAL LETTER U WITH DOUBLE ACUTE)
    +
    +
    +- 0x016A (LATIN CAPITAL LETTER U WITH MACRON)
    +
    +
    +- 0x0172 (LATIN CAPITAL LETTER U WITH OGONEK)
    +
    +
    +- 0x016E (LATIN CAPITAL LETTER U WITH RING ABOVE)
    +
    +
    +- 0x1E82 (LATIN CAPITAL LETTER W WITH ACUTE)
    +
    +
    +- 0x0174 (LATIN CAPITAL LETTER W WITH CIRCUMFLEX)
    +
    +
    +- 0x1E84 (LATIN CAPITAL LETTER W WITH DIAERESIS)
    +
    +
    +- 0x1E80 (LATIN CAPITAL LETTER W WITH GRAVE)
    +
    +
    +- 0x0176 (LATIN CAPITAL LETTER Y WITH CIRCUMFLEX)
    +
    +
    +- 0x1EF2 (LATIN CAPITAL LETTER Y WITH GRAVE)
    +
    +
    +- 0x0179 (LATIN CAPITAL LETTER Z WITH ACUTE)
    +
    +
    +- 0x017B (LATIN CAPITAL LETTER Z WITH DOT ABOVE)
    +
    +
    +- 0x0103 (LATIN SMALL LETTER A WITH BREVE)
    +
    +
    +- 0x0101 (LATIN SMALL LETTER A WITH MACRON)
    +
    +
    +- 0x0105 (LATIN SMALL LETTER A WITH OGONEK)
    +
    +
    +- 0x0107 (LATIN SMALL LETTER C WITH ACUTE)
    +
    +
    +- 0x010D (LATIN SMALL LETTER C WITH CARON)
    +
    +
    +- 0x010B (LATIN SMALL LETTER C WITH DOT ABOVE)
    +
    +
    +- 0x010F (LATIN SMALL LETTER D WITH CARON)
    +
    +
    +- 0x0111 (LATIN SMALL LETTER D WITH STROKE)
    +
    +
    +- 0x011B (LATIN SMALL LETTER E WITH CARON)
    +
    +
    +- 0x0117 (LATIN SMALL LETTER E WITH DOT ABOVE)
    +
    +
    +- 0x0113 (LATIN SMALL LETTER E WITH MACRON)
    +
    +
    +- 0x0119 (LATIN SMALL LETTER E WITH OGONEK)
    +
    +
    +- 0x011F (LATIN SMALL LETTER G WITH BREVE)
    +
    +
    +- 0x0123 (LATIN SMALL LETTER G WITH CEDILLA)
    +
    +
    +- 0x0121 (LATIN SMALL LETTER G WITH DOT ABOVE)
    +
    +
    +- 0x0127 (LATIN SMALL LETTER H WITH STROKE)
    +
    +
    +- 0x012B (LATIN SMALL LETTER I WITH MACRON)
    +
    +
    +- 0x012F (LATIN SMALL LETTER I WITH OGONEK)
    +
    +
    +- 0x0237 (LATIN SMALL LETTER DOTLESS J)
    +
    +
    +- 0x0137 (LATIN SMALL LETTER K WITH CEDILLA)
    +
    +
    +- 0x013A (LATIN SMALL LETTER L WITH ACUTE)
    +
    +
    +- 0x013E (LATIN SMALL LETTER L WITH CARON)
    +
    +
    +- 0x013C (LATIN SMALL LETTER L WITH CEDILLA)
    +
    +
    +- 0x0144 (LATIN SMALL LETTER N WITH ACUTE)
    +
    +
    +- 0x0148 (LATIN SMALL LETTER N WITH CARON)
    +
    +
    +- 0x0146 (LATIN SMALL LETTER N WITH CEDILLA)
    +
    +
    +- 0x014B (LATIN SMALL LETTER ENG)
    +
    +
    +- 0x0151 (LATIN SMALL LETTER O WITH DOUBLE ACUTE)
    +
    +
    +- 0x014D (LATIN SMALL LETTER O WITH MACRON)
    +
    +
    +- 0x0155 (LATIN SMALL LETTER R WITH ACUTE)
    +
    +
    +- 0x0159 (LATIN SMALL LETTER R WITH CARON)
    +
    +
    +- 0x0157 (LATIN SMALL LETTER R WITH CEDILLA)
    +
    +
    +- 0x015B (LATIN SMALL LETTER S WITH ACUTE)
    +
    +
    +- 0x015F (LATIN SMALL LETTER S WITH CEDILLA)
    +
    +
    +- 0x0219 (LATIN SMALL LETTER S WITH COMMA BELOW)
    +
    +
    +- 0x0165 (LATIN SMALL LETTER T WITH CARON)
    +
    +
    +- 0x021B (LATIN SMALL LETTER T WITH COMMA BELOW)
    +
    +
    +- 0x016D (LATIN SMALL LETTER U WITH BREVE)
    +
    +
    +- 0x0171 (LATIN SMALL LETTER U WITH DOUBLE ACUTE)
    +
    +
    +- 0x016B (LATIN SMALL LETTER U WITH MACRON)
    +
    +
    +- 0x0173 (LATIN SMALL LETTER U WITH OGONEK)
    +
    +
    +- 0x016F (LATIN SMALL LETTER U WITH RING ABOVE)
    +
    +
    +- 0x1E83 (LATIN SMALL LETTER W WITH ACUTE)
    +
    +
    +- 0x0175 (LATIN SMALL LETTER W WITH CIRCUMFLEX)
    +
    +
    +- 0x1E85 (LATIN SMALL LETTER W WITH DIAERESIS)
    +
    +
    +- 0x1E81 (LATIN SMALL LETTER W WITH GRAVE)
    +
    +
    +- 0x0177 (LATIN SMALL LETTER Y WITH CIRCUMFLEX)
    +
    +
    +- 0x1EF3 (LATIN SMALL LETTER Y WITH GRAVE)
    +
    +
    +- 0x017A (LATIN SMALL LETTER Z WITH ACUTE)
    +
    +
    +- 0x017C (LATIN SMALL LETTER Z WITH DOT ABOVE)
    +
    +
    +- 0x0302 (COMBINING CIRCUMFLEX ACCENT)
    +
    +
    +- 0x030A (COMBINING RING ABOVE)
    +
    +
    +- 0x0303 (COMBINING TILDE)
    +
    +
    +- 0x0312 (COMBINING TURNED COMMA ABOVE)
    +
    +
    +- 0x0326 (COMBINING COMMA BELOW)
    +
    +
    +- 0x0327 (COMBINING CEDILLA)
    +
    +
    +- 0x02DD (DOUBLE ACUTE ACCENT)
    +
    +
    +- 0x02C7 (CARON)
    +
    +
    +- 0x02D8 (BREVE)
    +
    +
    +- 0x02DB (OGONEK)
    +
    +

    [code: missing-codepoints]

    +
+

Check for codepoints not covered by METADATA subsets.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/unreachable_subsetting>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    The following codepoints supported by the font are not covered by +any subsets defined in the font's metadata file, and will never +be served. You can solve this by either manually adding additional +subset declarations to METADATA.pb, or by editing the glyphset +definitions.

    +
      +
    • U+0305 COMBINING OVERLINE: try adding one of: gothic, glagolitic, elbasan, coptic, math
    • +
    • U+0306 COMBINING BREVE: try adding one of: old-permic, tifinagh
    • +
    • U+0307 COMBINING DOT ABOVE: try adding one of: syriac, old-permic, tifinagh, coptic, math, tai-le, malayalam, canadian-aboriginal
    • +
    • U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: cherokee, osage
    • +
    • U+030C COMBINING CARON: try adding one of: cherokee, tai-le
    • +
    • U+0328 COMBINING OGONEK: not included in any glyphset definition
    • +
    • U+0391 GREEK CAPITAL LETTER ALPHA: try adding one of: greek, elbasan, math
    • +
    • U+0392 GREEK CAPITAL LETTER BETA: try adding one of: greek, elbasan, math
    • +
    • U+0393 GREEK CAPITAL LETTER GAMMA: try adding one of: greek, elbasan, math
    • +
    • U+0394 GREEK CAPITAL LETTER DELTA: try adding one of: greek, elbasan, math
    • +
    • U+0395 GREEK CAPITAL LETTER EPSILON: try adding one of: greek, elbasan, math
    • +
    • U+0396 GREEK CAPITAL LETTER ZETA: try adding one of: greek, elbasan, math
    • +
    • U+0397 GREEK CAPITAL LETTER ETA: try adding one of: greek, elbasan, math
    • +
    • U+0398 GREEK CAPITAL LETTER THETA: try adding one of: greek, elbasan, math
    • +
    • U+0399 GREEK CAPITAL LETTER IOTA: try adding one of: greek, elbasan, math
    • +
    • U+039A GREEK CAPITAL LETTER KAPPA: try adding one of: greek, elbasan, math
    • +
    • U+039B GREEK CAPITAL LETTER LAMDA: try adding one of: greek, elbasan, math
    • +
    • U+039C GREEK CAPITAL LETTER MU: try adding one of: greek, elbasan, math
    • +
    • U+039D GREEK CAPITAL LETTER NU: try adding one of: greek, elbasan, math
    • +
    • U+039E GREEK CAPITAL LETTER XI: try adding one of: greek, elbasan, math
    • +
    • U+039F GREEK CAPITAL LETTER OMICRON: try adding one of: greek, elbasan, math
    • +
    • U+03A0 GREEK CAPITAL LETTER PI: try adding one of: greek, elbasan, math
    • +
    • U+03A1 GREEK CAPITAL LETTER RHO: try adding one of: greek, elbasan, math
    • +
    • U+03A3 GREEK CAPITAL LETTER SIGMA: try adding one of: greek, elbasan, math
    • +
    • U+03A4 GREEK CAPITAL LETTER TAU: try adding one of: greek, elbasan, math
    • +
    • U+03A5 GREEK CAPITAL LETTER UPSILON: try adding one of: greek, elbasan, math
    • +
    • U+03A6 GREEK CAPITAL LETTER PHI: try adding one of: greek, elbasan, math
    • +
    • U+03A7 GREEK CAPITAL LETTER CHI: try adding one of: greek, elbasan, math
    • +
    • U+03A8 GREEK CAPITAL LETTER PSI: try adding one of: greek, elbasan, math
    • +
    • U+03A9 GREEK CAPITAL LETTER OMEGA: try adding one of: greek, elbasan, math
    • +
    • U+03B1 GREEK SMALL LETTER ALPHA: try adding one of: greek, math
    • +
    • U+03B2 GREEK SMALL LETTER BETA: try adding one of: greek, math
    • +
    • U+03B3 GREEK SMALL LETTER GAMMA: try adding one of: greek, math
    • +
    • U+03B4 GREEK SMALL LETTER DELTA: try adding one of: greek, math
    • +
    • U+03B5 GREEK SMALL LETTER EPSILON: try adding one of: greek, math
    • +
    • U+03B6 GREEK SMALL LETTER ZETA: try adding one of: greek, math
    • +
    • U+03B7 GREEK SMALL LETTER ETA: try adding one of: greek, math
    • +
    • U+03B8 GREEK SMALL LETTER THETA: try adding one of: greek, math
    • +
    • U+03B9 GREEK SMALL LETTER IOTA: try adding one of: greek, math
    • +
    • U+03BA GREEK SMALL LETTER KAPPA: try adding one of: greek, math
    • +
    • U+03BB GREEK SMALL LETTER LAMDA: try adding one of: greek, math
    • +
    • U+03BC GREEK SMALL LETTER MU: try adding one of: greek, math
    • +
    • U+03BD GREEK SMALL LETTER NU: try adding one of: greek, math
    • +
    • U+03BE GREEK SMALL LETTER XI: try adding one of: greek, math
    • +
    • U+03BF GREEK SMALL LETTER OMICRON: try adding one of: greek, math
    • +
    • U+03C0 GREEK SMALL LETTER PI: try adding one of: yi, greek, math
    • +
    • U+03C1 GREEK SMALL LETTER RHO: try adding one of: greek, math
    • +
    • U+03C3 GREEK SMALL LETTER SIGMA: try adding one of: greek, math
    • +
    • U+03C4 GREEK SMALL LETTER TAU: try adding one of: greek, math
    • +
    • U+03C5 GREEK SMALL LETTER UPSILON: try adding one of: greek, math
    • +
    • U+03C6 GREEK SMALL LETTER PHI: try adding one of: greek, math
    • +
    • U+03C7 GREEK SMALL LETTER CHI: try adding one of: greek, math
    • +
    • U+03C8 GREEK SMALL LETTER PSI: try adding one of: greek, math
    • +
    • U+03C9 GREEK SMALL LETTER OMEGA: try adding one of: greek, math
    • +
    • U+2015 HORIZONTAL BAR: try adding adlam
    • +
    • U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition
    • +
    • U+2021 DOUBLE DAGGER: try adding adlam
    • +
    • U+2025 TWO DOT LEADER: try adding phags-pa
    • +
    • U+2030 PER MILLE SIGN: try adding adlam
    • +
    • U+203B REFERENCE MARK: not included in any glyphset definition
    • +
    • U+205A TWO DOT PUNCTUATION: try adding one of: old-turkic, old-hungarian
    • +
    • U+205D TRICOLON: try adding one of: meroitic, old-hungarian
    • +
    • U+2103 DEGREE CELSIUS: not included in any glyphset definition
    • +
    • U+2109 DEGREE FAHRENHEIT: not included in any glyphset definition
    • +
    • U+210A SCRIPT SMALL G: try adding math
    • +
    • U+2121 TELEPHONE SIGN: not included in any glyphset definition
    • +
    • U+212B ANGSTROM SIGN: not included in any glyphset definition
    • +
    • U+213B FACSIMILE SIGN: not included in any glyphset definition
    • +
    • U+2160 ROMAN NUMERAL ONE: try adding symbols
    • +
    • U+2161 ROMAN NUMERAL TWO: try adding symbols
    • +
    • U+2162 ROMAN NUMERAL THREE: try adding symbols
    • +
    • U+2163 ROMAN NUMERAL FOUR: try adding symbols
    • +
    • U+2164 ROMAN NUMERAL FIVE: try adding symbols
    • +
    • U+2165 ROMAN NUMERAL SIX: try adding symbols
    • +
    • U+2166 ROMAN NUMERAL SEVEN: try adding symbols
    • +
    • U+2167 ROMAN NUMERAL EIGHT: try adding symbols
    • +
    • U+2168 ROMAN NUMERAL NINE: try adding symbols
    • +
    • U+2169 ROMAN NUMERAL TEN: try adding symbols
    • +
    • U+216A ROMAN NUMERAL ELEVEN: try adding symbols
    • +
    • U+216B ROMAN NUMERAL TWELVE: try adding symbols
    • +
    • U+2170 SMALL ROMAN NUMERAL ONE: try adding symbols
    • +
    • U+2171 SMALL ROMAN NUMERAL TWO: try adding symbols
    • +
    • U+2172 SMALL ROMAN NUMERAL THREE: try adding symbols
    • +
    • U+2173 SMALL ROMAN NUMERAL FOUR: try adding symbols
    • +
    • U+2174 SMALL ROMAN NUMERAL FIVE: try adding symbols
    • +
    • U+2175 SMALL ROMAN NUMERAL SIX: try adding symbols
    • +
    • U+2176 SMALL ROMAN NUMERAL SEVEN: try adding symbols
    • +
    • U+2177 SMALL ROMAN NUMERAL EIGHT: try adding symbols
    • +
    • U+2178 SMALL ROMAN NUMERAL NINE: try adding symbols
    • +
    • U+2179 SMALL ROMAN NUMERAL TEN: try adding symbols
    • +
    • U+217A SMALL ROMAN NUMERAL ELEVEN: try adding symbols
    • +
    • U+217B SMALL ROMAN NUMERAL TWELVE: try adding symbols
    • +
    • U+217F SMALL ROMAN NUMERAL ONE THOUSAND: try adding symbols
    • +
    • U+2190 LEFTWARDS ARROW: try adding one of: symbols, math
    • +
    • U+2192 RIGHTWARDS ARROW: try adding one of: symbols, math
    • +
    • U+21C4 RIGHTWARDS ARROW OVER LEFTWARDS ARROW: try adding math
    • +
    • U+21C5 UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW: try adding math
    • +
    • U+21C6 LEFTWARDS ARROW OVER RIGHTWARDS ARROW: try adding math
    • +
    • U+21E6 LEFTWARDS WHITE ARROW: try adding symbols
    • +
    • U+21E7 UPWARDS WHITE ARROW: try adding symbols
    • +
    • U+21E8 RIGHTWARDS WHITE ARROW: try adding symbols
    • +
    • U+21E9 DOWNWARDS WHITE ARROW: try adding symbols
    • +
    • U+2312 ARC: try adding symbols
    • +
    • U+23A7 LEFT CURLY BRACKET UPPER HOOK: try adding math
    • +
    • U+23A8 LEFT CURLY BRACKET MIDDLE PIECE: try adding math
    • +
    • U+23A9 LEFT CURLY BRACKET LOWER HOOK: try adding math
    • +
    • U+23AB RIGHT CURLY BRACKET UPPER HOOK: try adding math
    • +
    • U+23AC RIGHT CURLY BRACKET MIDDLE PIECE: try adding math
    • +
    • U+23AD RIGHT CURLY BRACKET LOWER HOOK: try adding math
    • +
    • U+2460 CIRCLED DIGIT ONE: try adding one of: mongolian, yi, symbols
    • +
    • U+2461 CIRCLED DIGIT TWO: try adding one of: mongolian, yi, symbols
    • +
    • U+2462 CIRCLED DIGIT THREE: try adding one of: mongolian, yi, symbols
    • +
    • U+2463 CIRCLED DIGIT FOUR: try adding one of: mongolian, yi, symbols
    • +
    • U+2464 CIRCLED DIGIT FIVE: try adding one of: mongolian, yi, symbols
    • +
    • U+2465 CIRCLED DIGIT SIX: try adding one of: mongolian, yi, symbols
    • +
    • U+2466 CIRCLED DIGIT SEVEN: try adding one of: mongolian, yi, symbols
    • +
    • U+2467 CIRCLED DIGIT EIGHT: try adding one of: mongolian, yi, symbols
    • +
    • U+2468 CIRCLED DIGIT NINE: try adding one of: mongolian, yi, symbols
    • +
    • U+2469 CIRCLED NUMBER TEN: try adding one of: mongolian, yi, symbols
    • +
    • U+246A CIRCLED NUMBER ELEVEN: try adding one of: mongolian, yi, symbols
    • +
    • U+246B CIRCLED NUMBER TWELVE: try adding one of: mongolian, yi, symbols
    • +
    • U+246C CIRCLED NUMBER THIRTEEN: try adding one of: mongolian, yi, symbols
    • +
    • U+246D CIRCLED NUMBER FOURTEEN: try adding one of: mongolian, yi, symbols
    • +
    • U+246E CIRCLED NUMBER FIFTEEN: try adding one of: mongolian, yi, symbols
    • +
    • U+246F CIRCLED NUMBER SIXTEEN: try adding one of: mongolian, yi, symbols
    • +
    • U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: mongolian, yi, symbols
    • +
    • U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: mongolian, yi, symbols
    • +
    • U+2472 CIRCLED NUMBER NINETEEN: try adding one of: mongolian, yi, symbols
    • +
    • U+2473 CIRCLED NUMBER TWENTY: try adding one of: mongolian, yi, symbols
    • +
    • U+2474 PARENTHESIZED DIGIT ONE: try adding one of: symbols, math
    • +
    • U+2475 PARENTHESIZED DIGIT TWO: try adding one of: symbols, math
    • +
    • U+2476 PARENTHESIZED DIGIT THREE: try adding symbols
    • +
    • U+2477 PARENTHESIZED DIGIT FOUR: try adding symbols
    • +
    • U+2478 PARENTHESIZED DIGIT FIVE: try adding symbols
    • +
    • U+2479 PARENTHESIZED DIGIT SIX: try adding symbols
    • +
    • U+247A PARENTHESIZED DIGIT SEVEN: try adding symbols
    • +
    • U+247B PARENTHESIZED DIGIT EIGHT: try adding symbols
    • +
    • U+247C PARENTHESIZED DIGIT NINE: try adding symbols
    • +
    • U+247D PARENTHESIZED NUMBER TEN: try adding symbols
    • +
    • U+247E PARENTHESIZED NUMBER ELEVEN: try adding symbols
    • +
    • U+247F PARENTHESIZED NUMBER TWELVE: try adding symbols
    • +
    • U+2480 PARENTHESIZED NUMBER THIRTEEN: try adding symbols
    • +
    • U+2481 PARENTHESIZED NUMBER FOURTEEN: try adding symbols
    • +
    • U+2482 PARENTHESIZED NUMBER FIFTEEN: try adding symbols
    • +
    • U+2483 PARENTHESIZED NUMBER SIXTEEN: try adding symbols
    • +
    • U+2484 PARENTHESIZED NUMBER SEVENTEEN: try adding symbols
    • +
    • U+2485 PARENTHESIZED NUMBER EIGHTEEN: try adding symbols
    • +
    • U+2486 PARENTHESIZED NUMBER NINETEEN: try adding symbols
    • +
    • U+2487 PARENTHESIZED NUMBER TWENTY: try adding symbols
    • +
    • U+2488 DIGIT ONE FULL STOP: try adding symbols
    • +
    • U+2489 DIGIT TWO FULL STOP: try adding symbols
    • +
    • U+248A DIGIT THREE FULL STOP: try adding symbols
    • +
    • U+248B DIGIT FOUR FULL STOP: try adding symbols
    • +
    • U+248C DIGIT FIVE FULL STOP: try adding symbols
    • +
    • U+248D DIGIT SIX FULL STOP: try adding symbols
    • +
    • U+248E DIGIT SEVEN FULL STOP: try adding symbols
    • +
    • U+248F DIGIT EIGHT FULL STOP: try adding symbols
    • +
    • U+2490 DIGIT NINE FULL STOP: try adding symbols
    • +
    • U+249C PARENTHESIZED LATIN SMALL LETTER A: try adding symbols
    • +
    • U+249D PARENTHESIZED LATIN SMALL LETTER B: try adding symbols
    • +
    • U+249E PARENTHESIZED LATIN SMALL LETTER C: try adding symbols
    • +
    • U+249F PARENTHESIZED LATIN SMALL LETTER D: try adding symbols
    • +
    • U+24A0 PARENTHESIZED LATIN SMALL LETTER E: try adding symbols
    • +
    • U+24A1 PARENTHESIZED LATIN SMALL LETTER F: try adding symbols
    • +
    • U+24A2 PARENTHESIZED LATIN SMALL LETTER G: try adding symbols
    • +
    • U+24A3 PARENTHESIZED LATIN SMALL LETTER H: try adding symbols
    • +
    • U+24A4 PARENTHESIZED LATIN SMALL LETTER I: try adding symbols
    • +
    • U+24A5 PARENTHESIZED LATIN SMALL LETTER J: try adding symbols
    • +
    • U+24A6 PARENTHESIZED LATIN SMALL LETTER K: try adding symbols
    • +
    • U+24A7 PARENTHESIZED LATIN SMALL LETTER L: try adding symbols
    • +
    • U+24A8 PARENTHESIZED LATIN SMALL LETTER M: try adding symbols
    • +
    • U+24A9 PARENTHESIZED LATIN SMALL LETTER N: try adding symbols
    • +
    • U+24AA PARENTHESIZED LATIN SMALL LETTER O: try adding symbols
    • +
    • U+24AB PARENTHESIZED LATIN SMALL LETTER P: try adding symbols
    • +
    • U+24AC PARENTHESIZED LATIN SMALL LETTER Q: try adding symbols
    • +
    • U+24AD PARENTHESIZED LATIN SMALL LETTER R: try adding symbols
    • +
    • U+24AE PARENTHESIZED LATIN SMALL LETTER S: try adding symbols
    • +
    • U+24AF PARENTHESIZED LATIN SMALL LETTER T: try adding symbols
    • +
    • U+24B0 PARENTHESIZED LATIN SMALL LETTER U: try adding symbols
    • +
    • U+24B1 PARENTHESIZED LATIN SMALL LETTER V: try adding symbols
    • +
    • U+24B2 PARENTHESIZED LATIN SMALL LETTER W: try adding symbols
    • +
    • U+24B3 PARENTHESIZED LATIN SMALL LETTER X: try adding symbols
    • +
    • U+24B4 PARENTHESIZED LATIN SMALL LETTER Y: try adding symbols
    • +
    • U+24B5 PARENTHESIZED LATIN SMALL LETTER Z: try adding symbols
    • +
    • U+24EA CIRCLED DIGIT ZERO: try adding symbols
    • +
    • U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition
    • +
    • U+2501 BOX DRAWINGS HEAVY HORIZONTAL: not included in any glyphset definition
    • +
    • U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+2503 BOX DRAWINGS HEAVY VERTICAL: not included in any glyphset definition
    • +
    • U+2504 BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL: not included in any glyphset definition
    • +
    • U+2505 BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL: not included in any glyphset definition
    • +
    • U+2506 BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL: not included in any glyphset definition
    • +
    • U+2507 BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL: not included in any glyphset definition
    • +
    • U+2508 BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL: not included in any glyphset definition
    • +
    • U+2509 BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL: not included in any glyphset definition
    • +
    • U+250A BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL: not included in any glyphset definition
    • +
    • U+250B BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL: not included in any glyphset definition
    • +
    • U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+250D BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY: not included in any glyphset definition
    • +
    • U+250E BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT: not included in any glyphset definition
    • +
    • U+250F BOX DRAWINGS HEAVY DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2511 BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY: not included in any glyphset definition
    • +
    • U+2512 BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT: not included in any glyphset definition
    • +
    • U+2513 BOX DRAWINGS HEAVY DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2515 BOX DRAWINGS UP LIGHT AND RIGHT HEAVY: not included in any glyphset definition
    • +
    • U+2516 BOX DRAWINGS UP HEAVY AND RIGHT LIGHT: not included in any glyphset definition
    • +
    • U+2517 BOX DRAWINGS HEAVY UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition
    • +
    • U+2519 BOX DRAWINGS UP LIGHT AND LEFT HEAVY: not included in any glyphset definition
    • +
    • U+251A BOX DRAWINGS UP HEAVY AND LEFT LIGHT: not included in any glyphset definition
    • +
    • U+251B BOX DRAWINGS HEAVY UP AND LEFT: not included in any glyphset definition
    • +
    • U+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT: not included in any glyphset definition
    • +
    • U+251D BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY: not included in any glyphset definition
    • +
    • U+251E BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT: not included in any glyphset definition
    • +
    • U+251F BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT: not included in any glyphset definition
    • +
    • U+2520 BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT: not included in any glyphset definition
    • +
    • U+2521 BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY: not included in any glyphset definition
    • +
    • U+2522 BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY: not included in any glyphset definition
    • +
    • U+2523 BOX DRAWINGS HEAVY VERTICAL AND RIGHT: not included in any glyphset definition
    • +
    • U+2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT: not included in any glyphset definition
    • +
    • U+2525 BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY: not included in any glyphset definition
    • +
    • U+2526 BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT: not included in any glyphset definition
    • +
    • U+2527 BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT: not included in any glyphset definition
    • +
    • U+2528 BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT: not included in any glyphset definition
    • +
    • U+2529 BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY: not included in any glyphset definition
    • +
    • U+252A BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY: not included in any glyphset definition
    • +
    • U+252B BOX DRAWINGS HEAVY VERTICAL AND LEFT: not included in any glyphset definition
    • +
    • U+252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL: not included in any glyphset definition
    • +
    • U+252D BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT: not included in any glyphset definition
    • +
    • U+252E BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT: not included in any glyphset definition
    • +
    • U+252F BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY: not included in any glyphset definition
    • +
    • U+2530 BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT: not included in any glyphset definition
    • +
    • U+2531 BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY: not included in any glyphset definition
    • +
    • U+2532 BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY: not included in any glyphset definition
    • +
    • U+2533 BOX DRAWINGS HEAVY DOWN AND HORIZONTAL: not included in any glyphset definition
    • +
    • U+2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL: not included in any glyphset definition
    • +
    • U+2535 BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT: not included in any glyphset definition
    • +
    • U+2536 BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT: not included in any glyphset definition
    • +
    • U+2537 BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY: not included in any glyphset definition
    • +
    • U+2538 BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT: not included in any glyphset definition
    • +
    • U+2539 BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY: not included in any glyphset definition
    • +
    • U+253A BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY: not included in any glyphset definition
    • +
    • U+253B BOX DRAWINGS HEAVY UP AND HORIZONTAL: not included in any glyphset definition
    • +
    • U+253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL: not included in any glyphset definition
    • +
    • U+253D BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT: not included in any glyphset definition
    • +
    • U+253E BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT: not included in any glyphset definition
    • +
    • U+253F BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY: not included in any glyphset definition
    • +
    • U+2540 BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT: not included in any glyphset definition
    • +
    • U+2541 BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT: not included in any glyphset definition
    • +
    • U+2542 BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT: not included in any glyphset definition
    • +
    • U+2543 BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT: not included in any glyphset definition
    • +
    • U+2544 BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT: not included in any glyphset definition
    • +
    • U+2545 BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT: not included in any glyphset definition
    • +
    • U+2546 BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT: not included in any glyphset definition
    • +
    • U+2547 BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY: not included in any glyphset definition
    • +
    • U+2548 BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY: not included in any glyphset definition
    • +
    • U+2549 BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY: not included in any glyphset definition
    • +
    • U+254A BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY: not included in any glyphset definition
    • +
    • U+254B BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL: not included in any glyphset definition
    • +
    • U+2550 BOX DRAWINGS DOUBLE HORIZONTAL: not included in any glyphset definition
    • +
    • U+255E BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE: not included in any glyphset definition
    • +
    • U+2561 BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE: not included in any glyphset definition
    • +
    • U+256A BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE: not included in any glyphset definition
    • +
    • U+256D BOX DRAWINGS LIGHT ARC DOWN AND RIGHT: not included in any glyphset definition
    • +
    • U+256E BOX DRAWINGS LIGHT ARC DOWN AND LEFT: not included in any glyphset definition
    • +
    • U+256F BOX DRAWINGS LIGHT ARC UP AND LEFT: not included in any glyphset definition
    • +
    • U+2570 BOX DRAWINGS LIGHT ARC UP AND RIGHT: not included in any glyphset definition
    • +
    • U+2571 BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT: not included in any glyphset definition
    • +
    • U+2572 BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT: not included in any glyphset definition
    • +
    • U+2573 BOX DRAWINGS LIGHT DIAGONAL CROSS: not included in any glyphset definition
    • +
    • U+2581 LOWER ONE EIGHTH BLOCK: not included in any glyphset definition
    • +
    • U+2582 LOWER ONE QUARTER BLOCK: not included in any glyphset definition
    • +
    • U+2583 LOWER THREE EIGHTHS BLOCK: not included in any glyphset definition
    • +
    • U+2584 LOWER HALF BLOCK: not included in any glyphset definition
    • +
    • U+2585 LOWER FIVE EIGHTHS BLOCK: not included in any glyphset definition
    • +
    • U+2586 LOWER THREE QUARTERS BLOCK: not included in any glyphset definition
    • +
    • U+2587 LOWER SEVEN EIGHTHS BLOCK: not included in any glyphset definition
    • +
    • U+2588 FULL BLOCK: not included in any glyphset definition
    • +
    • U+2589 LEFT SEVEN EIGHTHS BLOCK: not included in any glyphset definition
    • +
    • U+258A LEFT THREE QUARTERS BLOCK: not included in any glyphset definition
    • +
    • U+258B LEFT FIVE EIGHTHS BLOCK: not included in any glyphset definition
    • +
    • U+258C LEFT HALF BLOCK: not included in any glyphset definition
    • +
    • U+258D LEFT THREE EIGHTHS BLOCK: not included in any glyphset definition
    • +
    • U+258E LEFT ONE QUARTER BLOCK: not included in any glyphset definition
    • +
    • U+258F LEFT ONE EIGHTH BLOCK: not included in any glyphset definition
    • +
    • U+2594 UPPER ONE EIGHTH BLOCK: not included in any glyphset definition
    • +
    • U+2595 RIGHT ONE EIGHTH BLOCK: not included in any glyphset definition
    • +
    • U+25A0 BLACK SQUARE: try adding symbols
    • +
    • U+25A1 WHITE SQUARE: try adding symbols
    • +
    • U+25A2 WHITE SQUARE WITH ROUNDED CORNERS: try adding symbols
    • +
    • U+25B2 BLACK UP-POINTING TRIANGLE: try adding symbols
    • +
    • U+25B3 WHITE UP-POINTING TRIANGLE: try adding one of: symbols, math
    • +
    • U+25B7 WHITE RIGHT-POINTING TRIANGLE: try adding one of: symbols, math
    • +
    • U+25BC BLACK DOWN-POINTING TRIANGLE: try adding symbols
    • +
    • U+25BD WHITE DOWN-POINTING TRIANGLE: try adding one of: symbols, math
    • +
    • U+25C1 WHITE LEFT-POINTING TRIANGLE: try adding one of: symbols, math
    • +
    • U+25C6 BLACK DIAMOND: try adding symbols
    • +
    • U+25C7 WHITE DIAMOND: try adding symbols
    • +
    • U+25C9 FISHEYE: try adding symbols
    • +
    • U+25CB WHITE CIRCLE: try adding symbols
    • +
    • U+25CE BULLSEYE: try adding symbols
    • +
    • U+25CF BLACK CIRCLE: try adding symbols
    • +
    • U+25E2 BLACK LOWER RIGHT TRIANGLE: try adding symbols
    • +
    • U+25E3 BLACK LOWER LEFT TRIANGLE: try adding symbols
    • +
    • U+25E4 BLACK UPPER LEFT TRIANGLE: try adding symbols
    • +
    • U+25E5 BLACK UPPER RIGHT TRIANGLE: try adding symbols
    • +
    • U+25EF LARGE CIRCLE: try adding symbols
    • +
    • U+2600 BLACK SUN WITH RAYS: try adding symbols
    • +
    • U+2601 CLOUD: try adding symbols
    • +
    • U+2602 UMBRELLA: try adding symbols
    • +
    • U+2603 SNOWMAN: try adding symbols
    • +
    • U+2605 BLACK STAR: try adding symbols
    • +
    • U+2606 WHITE STAR: try adding symbols
    • +
    • U+260E BLACK TELEPHONE: try adding symbols
    • +
    • U+261C WHITE LEFT POINTING INDEX: try adding symbols
    • +
    • U+261D WHITE UP POINTING INDEX: try adding symbols
    • +
    • U+261E WHITE RIGHT POINTING INDEX: try adding symbols
    • +
    • U+261F WHITE DOWN POINTING INDEX: try adding symbols
    • +
    • U+2640 FEMALE SIGN: try adding symbols
    • +
    • U+2642 MALE SIGN: try adding symbols
    • +
    • U+2660 BLACK SPADE SUIT: try adding symbols
    • +
    • U+2661 WHITE HEART SUIT: try adding symbols
    • +
    • U+2662 WHITE DIAMOND SUIT: try adding symbols
    • +
    • U+2663 BLACK CLUB SUIT: try adding symbols
    • +
    • U+2664 WHITE SPADE SUIT: try adding symbols
    • +
    • U+2665 BLACK HEART SUIT: try adding symbols
    • +
    • U+2666 BLACK DIAMOND SUIT: try adding symbols
    • +
    • U+2667 WHITE CLUB SUIT: try adding symbols
    • +
    • U+266A EIGHTH NOTE: try adding one of: music, symbols
    • +
    • U+266D MUSIC FLAT SIGN: try adding one of: music, symbols, math
    • +
    • U+266F MUSIC SHARP SIGN: try adding one of: music, symbols, math
    • +
    • U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols
    • +
    • U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols
    • +
    • U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols
    • +
    • U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols
    • +
    • U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols
    • +
    • U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols
    • +
    • U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols
    • +
    • U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols
    • +
    • U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols
    • +
    • U+27A1 BLACK RIGHTWARDS ARROW: try adding symbols
    • +
    • U+2B05 LEFTWARDS BLACK ARROW: try adding symbols
    • +
    • U+2B06 UPWARDS BLACK ARROW: try adding symbols
    • +
    • U+2B07 DOWNWARDS BLACK ARROW: try adding symbols
    • +
    • U+3004 JAPANESE INDUSTRIAL STANDARD SYMBOL: not included in any glyphset definition
    • +
    • U+301D REVERSED DOUBLE PRIME QUOTATION MARK: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+301F LOW DOUBLE PRIME QUOTATION MARK: not included in any glyphset definition
    • +
    • U+3020 POSTAL MARK FACE: not included in any glyphset definition
    • +
    • U+3036 CIRCLED POSTAL MARK: not included in any glyphset definition
    • +
    • U+3094 HIRAGANA LETTER VU: not included in any glyphset definition
    • +
    • U+3095 HIRAGANA LETTER SMALL KA: not included in any glyphset definition
    • +
    • U+3096 HIRAGANA LETTER SMALL KE: not included in any glyphset definition
    • +
    • U+30F7 KATAKANA LETTER VA: not included in any glyphset definition
    • +
    • U+30F8 KATAKANA LETTER VI: not included in any glyphset definition
    • +
    • U+30F9 KATAKANA LETTER VE: not included in any glyphset definition
    • +
    • U+30FA KATAKANA LETTER VO: not included in any glyphset definition
    • +
    • U+322A PARENTHESIZED IDEOGRAPH MOON: not included in any glyphset definition
    • +
    • U+322B PARENTHESIZED IDEOGRAPH FIRE: not included in any glyphset definition
    • +
    • U+322C PARENTHESIZED IDEOGRAPH WATER: not included in any glyphset definition
    • +
    • U+322D PARENTHESIZED IDEOGRAPH WOOD: not included in any glyphset definition
    • +
    • U+322E PARENTHESIZED IDEOGRAPH METAL: not included in any glyphset definition
    • +
    • U+322F PARENTHESIZED IDEOGRAPH EARTH: not included in any glyphset definition
    • +
    • U+3230 PARENTHESIZED IDEOGRAPH SUN: not included in any glyphset definition
    • +
    • U+3231 PARENTHESIZED IDEOGRAPH STOCK: not included in any glyphset definition
    • +
    • U+3232 PARENTHESIZED IDEOGRAPH HAVE: not included in any glyphset definition
    • +
    • U+3233 PARENTHESIZED IDEOGRAPH SOCIETY: not included in any glyphset definition
    • +
    • U+3234 PARENTHESIZED IDEOGRAPH NAME: not included in any glyphset definition
    • +
    • U+3235 PARENTHESIZED IDEOGRAPH SPECIAL: not included in any glyphset definition
    • +
    • U+3236 PARENTHESIZED IDEOGRAPH FINANCIAL: not included in any glyphset definition
    • +
    • U+3237 PARENTHESIZED IDEOGRAPH CONGRATULATION: not included in any glyphset definition
    • +
    • U+3238 PARENTHESIZED IDEOGRAPH LABOR: not included in any glyphset definition
    • +
    • U+3239 PARENTHESIZED IDEOGRAPH REPRESENT: not included in any glyphset definition
    • +
    • U+323A PARENTHESIZED IDEOGRAPH CALL: not included in any glyphset definition
    • +
    • U+323B PARENTHESIZED IDEOGRAPH STUDY: not included in any glyphset definition
    • +
    • U+323C PARENTHESIZED IDEOGRAPH SUPERVISE: not included in any glyphset definition
    • +
    • U+323D PARENTHESIZED IDEOGRAPH ENTERPRISE: not included in any glyphset definition
    • +
    • U+323E PARENTHESIZED IDEOGRAPH RESOURCE: not included in any glyphset definition
    • +
    • U+323F PARENTHESIZED IDEOGRAPH ALLIANCE: not included in any glyphset definition
    • +
    • U+3240 PARENTHESIZED IDEOGRAPH FESTIVAL: not included in any glyphset definition
    • +
    • U+3241 PARENTHESIZED IDEOGRAPH REST: not included in any glyphset definition
    • +
    • U+3242 PARENTHESIZED IDEOGRAPH SELF: not included in any glyphset definition
    • +
    • U+3243 PARENTHESIZED IDEOGRAPH REACH: not included in any glyphset definition
    • +
    • U+3251 CIRCLED NUMBER TWENTY ONE: not included in any glyphset definition
    • +
    • U+3252 CIRCLED NUMBER TWENTY TWO: not included in any glyphset definition
    • +
    • U+3253 CIRCLED NUMBER TWENTY THREE: not included in any glyphset definition
    • +
    • U+3254 CIRCLED NUMBER TWENTY FOUR: not included in any glyphset definition
    • +
    • U+3255 CIRCLED NUMBER TWENTY FIVE: not included in any glyphset definition
    • +
    • U+3256 CIRCLED NUMBER TWENTY SIX: not included in any glyphset definition
    • +
    • U+3257 CIRCLED NUMBER TWENTY SEVEN: not included in any glyphset definition
    • +
    • U+3258 CIRCLED NUMBER TWENTY EIGHT: not included in any glyphset definition
    • +
    • U+3259 CIRCLED NUMBER TWENTY NINE: not included in any glyphset definition
    • +
    • U+325A CIRCLED NUMBER THIRTY: not included in any glyphset definition
    • +
    • U+325B CIRCLED NUMBER THIRTY ONE: not included in any glyphset definition
    • +
    • U+3291 CIRCLED IDEOGRAPH STOCK: not included in any glyphset definition
    • +
    • U+3292 CIRCLED IDEOGRAPH HAVE: not included in any glyphset definition
    • +
    • U+3293 CIRCLED IDEOGRAPH SOCIETY: not included in any glyphset definition
    • +
    • U+3294 CIRCLED IDEOGRAPH NAME: not included in any glyphset definition
    • +
    • U+3296 CIRCLED IDEOGRAPH FINANCIAL: not included in any glyphset definition
    • +
    • U+3298 CIRCLED IDEOGRAPH LABOR: not included in any glyphset definition
    • +
    • U+3299 CIRCLED IDEOGRAPH SECRET: not included in any glyphset definition
    • +
    • U+329D CIRCLED IDEOGRAPH EXCELLENT: not included in any glyphset definition
    • +
    • U+329E CIRCLED IDEOGRAPH PRINT: not included in any glyphset definition
    • +
    • U+32A4 CIRCLED IDEOGRAPH HIGH: not included in any glyphset definition
    • +
    • U+32A5 CIRCLED IDEOGRAPH CENTRE: not included in any glyphset definition
    • +
    • U+32A6 CIRCLED IDEOGRAPH LOW: not included in any glyphset definition
    • +
    • U+32A7 CIRCLED IDEOGRAPH LEFT: not included in any glyphset definition
    • +
    • U+32A8 CIRCLED IDEOGRAPH RIGHT: not included in any glyphset definition
    • +
    • U+32A9 CIRCLED IDEOGRAPH MEDICINE: not included in any glyphset definition
    • +
    • U+32AA CIRCLED IDEOGRAPH RELIGION: not included in any glyphset definition
    • +
    • U+32AB CIRCLED IDEOGRAPH STUDY: not included in any glyphset definition
    • +
    • U+32AC CIRCLED IDEOGRAPH SUPERVISE: not included in any glyphset definition
    • +
    • U+32AD CIRCLED IDEOGRAPH ENTERPRISE: not included in any glyphset definition
    • +
    • U+32AE CIRCLED IDEOGRAPH RESOURCE: not included in any glyphset definition
    • +
    • U+32AF CIRCLED IDEOGRAPH ALLIANCE: not included in any glyphset definition
    • +
    • U+32B0 CIRCLED IDEOGRAPH NIGHT: not included in any glyphset definition
    • +
    • U+3300 SQUARE APAATO: not included in any glyphset definition
    • +
    • U+3303 SQUARE AARU: not included in any glyphset definition
    • +
    • U+3305 SQUARE INTI: not included in any glyphset definition
    • +
    • U+330D SQUARE KARORII: not included in any glyphset definition
    • +
    • U+3314 SQUARE KIRO: not included in any glyphset definition
    • +
    • U+3315 SQUARE KIROGURAMU: not included in any glyphset definition
    • +
    • U+3316 SQUARE KIROMEETORU: not included in any glyphset definition
    • +
    • U+3318 SQUARE GURAMU: not included in any glyphset definition
    • +
    • U+331E SQUARE KOOPO: not included in any glyphset definition
    • +
    • U+3322 SQUARE SENTI: not included in any glyphset definition
    • +
    • U+3323 SQUARE SENTO: not included in any glyphset definition
    • +
    • U+3326 SQUARE DORU: not included in any glyphset definition
    • +
    • U+3327 SQUARE TON: not included in any glyphset definition
    • +
    • U+332A SQUARE HAITU: not included in any glyphset definition
    • +
    • U+332B SQUARE PAASENTO: not included in any glyphset definition
    • +
    • U+3331 SQUARE BIRU: not included in any glyphset definition
    • +
    • U+3333 SQUARE HUIITO: not included in any glyphset definition
    • +
    • U+3336 SQUARE HEKUTAARU: not included in any glyphset definition
    • +
    • U+3339 SQUARE HERUTU: not included in any glyphset definition
    • +
    • U+333B SQUARE PEEZI: not included in any glyphset definition
    • +
    • U+3342 SQUARE HOON: not included in any glyphset definition
    • +
    • U+3347 SQUARE MANSYON: not included in any glyphset definition
    • +
    • U+3349 SQUARE MIRI: not included in any glyphset definition
    • +
    • U+334A SQUARE MIRIBAARU: not included in any glyphset definition
    • +
    • U+334D SQUARE MEETORU: not included in any glyphset definition
    • +
    • U+334E SQUARE YAADO: not included in any glyphset definition
    • +
    • U+3351 SQUARE RITTORU: not included in any glyphset definition
    • +
    • U+3357 SQUARE WATTO: not included in any glyphset definition
    • +
    • U+337B SQUARE ERA NAME HEISEI: not included in any glyphset definition
    • +
    • U+337C SQUARE ERA NAME SYOUWA: not included in any glyphset definition
    • +
    • U+337D SQUARE ERA NAME TAISYOU: not included in any glyphset definition
    • +
    • U+337E SQUARE ERA NAME MEIZI: not included in any glyphset definition
    • +
    • U+337F SQUARE CORPORATION: not included in any glyphset definition
    • +
    • U+3385 SQUARE KB: not included in any glyphset definition
    • +
    • U+3386 SQUARE MB: not included in any glyphset definition
    • +
    • U+3387 SQUARE GB: not included in any glyphset definition
    • +
    • U+3388 SQUARE CAL: not included in any glyphset definition
    • +
    • U+3389 SQUARE KCAL: not included in any glyphset definition
    • +
    • U+338E SQUARE MG: not included in any glyphset definition
    • +
    • U+338F SQUARE KG: not included in any glyphset definition
    • +
    • U+3390 SQUARE HZ: not included in any glyphset definition
    • +
    • U+3396 SQUARE ML: not included in any glyphset definition
    • +
    • U+3397 SQUARE DL: not included in any glyphset definition
    • +
    • U+3398 SQUARE KL: not included in any glyphset definition
    • +
    • U+339C SQUARE MM: try adding chinese-simplified
    • +
    • U+339D SQUARE CM: try adding chinese-simplified
    • +
    • U+339E SQUARE KM: not included in any glyphset definition
    • +
    • U+339F SQUARE MM SQUARED: not included in any glyphset definition
    • +
    • U+33A0 SQUARE CM SQUARED: not included in any glyphset definition
    • +
    • U+33A1 SQUARE M SQUARED: try adding chinese-simplified
    • +
    • U+33A2 SQUARE KM SQUARED: not included in any glyphset definition
    • +
    • U+33A3 SQUARE MM CUBED: not included in any glyphset definition
    • +
    • U+33A4 SQUARE CM CUBED: not included in any glyphset definition
    • +
    • U+33A5 SQUARE M CUBED: not included in any glyphset definition
    • +
    • U+33A6 SQUARE KM CUBED: not included in any glyphset definition
    • +
    • U+33B0 SQUARE PS: not included in any glyphset definition
    • +
    • U+33B1 SQUARE NS: not included in any glyphset definition
    • +
    • U+33B2 SQUARE MU S: not included in any glyphset definition
    • +
    • U+33B3 SQUARE MS: not included in any glyphset definition
    • +
    • U+33C4 SQUARE CC: not included in any glyphset definition
    • +
    • U+33C8 SQUARE DB: not included in any glyphset definition
    • +
    • U+33CB SQUARE HP: not included in any glyphset definition
    • +
    • U+33CC SQUARE IN: not included in any glyphset definition
    • +
    • U+33CD SQUARE KK: not included in any glyphset definition
    • +
    • U+33D4 SQUARE MB SMALL: not included in any glyphset definition
    • +
    • U+3D4E CJK UNIFIED IDEOGRAPH-3D4E: not included in any glyphset definition
    • +
    • U+4E28 CJK UNIFIED IDEOGRAPH-4E28: try adding chinese-simplified
    • +
    • U+4EE1 CJK UNIFIED IDEOGRAPH-4EE1: try adding chinese-simplified
    • +
    • U+4EFC CJK UNIFIED IDEOGRAPH-4EFC: not included in any glyphset definition
    • +
    • U+4F00 CJK UNIFIED IDEOGRAPH-4F00: not included in any glyphset definition
    • +
    • U+4F03 CJK UNIFIED IDEOGRAPH-4F03: not included in any glyphset definition
    • +
    • U+4F39 CJK UNIFIED IDEOGRAPH-4F39: not included in any glyphset definition
    • +
    • U+4F56 CJK UNIFIED IDEOGRAPH-4F56: not included in any glyphset definition
    • +
    • U+4F8A CJK UNIFIED IDEOGRAPH-4F8A: not included in any glyphset definition
    • +
    • U+4F92 CJK UNIFIED IDEOGRAPH-4F92: not included in any glyphset definition
    • +
    • U+4F94 CJK UNIFIED IDEOGRAPH-4F94: not included in any glyphset definition
    • +
    • U+4F9A CJK UNIFIED IDEOGRAPH-4F9A: not included in any glyphset definition
    • +
    • U+4FC9 CJK UNIFIED IDEOGRAPH-4FC9: not included in any glyphset definition
    • +
    • U+4FCD CJK UNIFIED IDEOGRAPH-4FCD: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+4FE0 CJK UNIFIED IDEOGRAPH-4FE0: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+4FF1 CJK UNIFIED IDEOGRAPH-4FF1: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+4FFF CJK UNIFIED IDEOGRAPH-4FFF: not included in any glyphset definition
    • +
    • U+501E CJK UNIFIED IDEOGRAPH-501E: not included in any glyphset definition
    • +
    • U+5022 CJK UNIFIED IDEOGRAPH-5022: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+5040 CJK UNIFIED IDEOGRAPH-5040: not included in any glyphset definition
    • +
    • U+5042 CJK UNIFIED IDEOGRAPH-5042: not included in any glyphset definition
    • +
    • U+5046 CJK UNIFIED IDEOGRAPH-5046: not included in any glyphset definition
    • +
    • U+5070 CJK UNIFIED IDEOGRAPH-5070: not included in any glyphset definition
    • +
    • U+5094 CJK UNIFIED IDEOGRAPH-5094: not included in any glyphset definition
    • +
    • U+50D8 CJK UNIFIED IDEOGRAPH-50D8: not included in any glyphset definition
    • +
    • U+50F4 CJK UNIFIED IDEOGRAPH-50F4: try adding chinese-hongkong
    • +
    • U+514A CJK UNIFIED IDEOGRAPH-514A: not included in any glyphset definition
    • +
    • U+5164 CJK UNIFIED IDEOGRAPH-5164: not included in any glyphset definition
    • +
    • U+519D CJK UNIFIED IDEOGRAPH-519D: not included in any glyphset definition
    • +
    • U+51BE CJK UNIFIED IDEOGRAPH-51BE: not included in any glyphset definition
    • +
    • U+51EC CJK UNIFIED IDEOGRAPH-51EC: not included in any glyphset definition
    • +
    • U+5215 CJK UNIFIED IDEOGRAPH-5215: not included in any glyphset definition
    • +
    • U+525D CJK UNIFIED IDEOGRAPH-525D: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+529C CJK UNIFIED IDEOGRAPH-529C: not included in any glyphset definition
    • +
    • U+52A6 CJK UNIFIED IDEOGRAPH-52A6: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+52AF CJK UNIFIED IDEOGRAPH-52AF: not included in any glyphset definition
    • +
    • U+52C0 CJK UNIFIED IDEOGRAPH-52C0: not included in any glyphset definition
    • +
    • U+52DB CJK UNIFIED IDEOGRAPH-52DB: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+5300 CJK UNIFIED IDEOGRAPH-5300: try adding chinese-simplified
    • +
    • U+5307 CJK UNIFIED IDEOGRAPH-5307: not included in any glyphset definition
    • +
    • U+5324 CJK UNIFIED IDEOGRAPH-5324: try adding chinese-hongkong
    • +
    • U+5372 CJK UNIFIED IDEOGRAPH-5372: not included in any glyphset definition
    • +
    • U+537D CJK UNIFIED IDEOGRAPH-537D: not included in any glyphset definition
    • +
    • U+5393 CJK UNIFIED IDEOGRAPH-5393: not included in any glyphset definition
    • +
    • U+53B2 CJK UNIFIED IDEOGRAPH-53B2: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+53DD CJK UNIFIED IDEOGRAPH-53DD: not included in any glyphset definition
    • +
    • U+541E CJK UNIFIED IDEOGRAPH-541E: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+548A CJK UNIFIED IDEOGRAPH-548A: not included in any glyphset definition
    • +
    • U+549C CJK UNIFIED IDEOGRAPH-549C: not included in any glyphset definition
    • +
    • U+54A9 CJK UNIFIED IDEOGRAPH-54A9: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+54FF CJK UNIFIED IDEOGRAPH-54FF: not included in any glyphset definition
    • +
    • U+555E CJK UNIFIED IDEOGRAPH-555E: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+5586 CJK UNIFIED IDEOGRAPH-5586: try adding chinese-simplified
    • +
    • U+5653 CJK UNIFIED IDEOGRAPH-5653: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+5699 CJK UNIFIED IDEOGRAPH-5699: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+56CA CJK UNIFIED IDEOGRAPH-56CA: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+5759 CJK UNIFIED IDEOGRAPH-5759: not included in any glyphset definition
    • +
    • U+5765 CJK UNIFIED IDEOGRAPH-5765: not included in any glyphset definition
    • +
    • U+57AC CJK UNIFIED IDEOGRAPH-57AC: not included in any glyphset definition
    • +
    • U+57C7 CJK UNIFIED IDEOGRAPH-57C7: try adding chinese-simplified
    • +
    • U+57C8 CJK UNIFIED IDEOGRAPH-57C8: not included in any glyphset definition
    • +
    • U+5861 CJK UNIFIED IDEOGRAPH-5861: not included in any glyphset definition
    • +
    • U+589E CJK UNIFIED IDEOGRAPH-589E: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+58B2 CJK UNIFIED IDEOGRAPH-58B2: not included in any glyphset definition
    • +
    • U+590B CJK UNIFIED IDEOGRAPH-590B: try adding chinese-simplified
    • +
    • U+5953 CJK UNIFIED IDEOGRAPH-5953: not included in any glyphset definition
    • +
    • U+595B CJK UNIFIED IDEOGRAPH-595B: not included in any glyphset definition
    • +
    • U+595D CJK UNIFIED IDEOGRAPH-595D: not included in any glyphset definition
    • +
    • U+5963 CJK UNIFIED IDEOGRAPH-5963: not included in any glyphset definition
    • +
    • U+59A4 CJK UNIFIED IDEOGRAPH-59A4: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+59BA CJK UNIFIED IDEOGRAPH-59BA: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+59F8 CJK UNIFIED IDEOGRAPH-59F8: not included in any glyphset definition
    • +
    • U+5B56 CJK UNIFIED IDEOGRAPH-5B56: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+5BC0 CJK UNIFIED IDEOGRAPH-5BC0: not included in any glyphset definition
    • +
    • U+5BD8 CJK UNIFIED IDEOGRAPH-5BD8: not included in any glyphset definition
    • +
    • U+5BEC CJK UNIFIED IDEOGRAPH-5BEC: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+5C1E CJK UNIFIED IDEOGRAPH-5C1E: not included in any glyphset definition
    • +
    • U+5C5B CJK UNIFIED IDEOGRAPH-5C5B: not included in any glyphset definition
    • +
    • U+5C62 CJK UNIFIED IDEOGRAPH-5C62: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+5CA6 CJK UNIFIED IDEOGRAPH-5CA6: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+5CBA CJK UNIFIED IDEOGRAPH-5CBA: not included in any glyphset definition
    • +
    • U+5CF5 CJK UNIFIED IDEOGRAPH-5CF5: not included in any glyphset definition
    • +
    • U+5D27 CJK UNIFIED IDEOGRAPH-5D27: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+5D42 CJK UNIFIED IDEOGRAPH-5D42: not included in any glyphset definition
    • +
    • U+5D53 CJK UNIFIED IDEOGRAPH-5D53: not included in any glyphset definition
    • +
    • U+5D6D CJK UNIFIED IDEOGRAPH-5D6D: not included in any glyphset definition
    • +
    • U+5DB8 CJK UNIFIED IDEOGRAPH-5DB8: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+5DB9 CJK UNIFIED IDEOGRAPH-5DB9: try adding chinese-hongkong
    • +
    • U+5DD0 CJK UNIFIED IDEOGRAPH-5DD0: not included in any glyphset definition
    • +
    • U+5DE2 CJK UNIFIED IDEOGRAPH-5DE2: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+5E77 CJK UNIFIED IDEOGRAPH-5E77: not included in any glyphset definition
    • +
    • U+5F21 CJK UNIFIED IDEOGRAPH-5F21: not included in any glyphset definition
    • +
    • U+5F34 CJK UNIFIED IDEOGRAPH-5F34: not included in any glyphset definition
    • +
    • U+5F45 CJK UNIFIED IDEOGRAPH-5F45: not included in any glyphset definition
    • +
    • U+5F67 CJK UNIFIED IDEOGRAPH-5F67: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+5FB5 CJK UNIFIED IDEOGRAPH-5FB5: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+5FB7 CJK UNIFIED IDEOGRAPH-5FB7: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+5FDE CJK UNIFIED IDEOGRAPH-5FDE: not included in any glyphset definition
    • +
    • U+605D CJK UNIFIED IDEOGRAPH-605D: not included in any glyphset definition
    • +
    • U+6085 CJK UNIFIED IDEOGRAPH-6085: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+608A CJK UNIFIED IDEOGRAPH-608A: try adding chinese-simplified
    • +
    • U+60D5 CJK UNIFIED IDEOGRAPH-60D5: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+60DE CJK UNIFIED IDEOGRAPH-60DE: try adding chinese-hongkong
    • +
    • U+60F2 CJK UNIFIED IDEOGRAPH-60F2: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+6111 CJK UNIFIED IDEOGRAPH-6111: not included in any glyphset definition
    • +
    • U+6120 CJK UNIFIED IDEOGRAPH-6120: try adding chinese-simplified
    • +
    • U+6130 CJK UNIFIED IDEOGRAPH-6130: not included in any glyphset definition
    • +
    • U+6137 CJK UNIFIED IDEOGRAPH-6137: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+6198 CJK UNIFIED IDEOGRAPH-6198: try adding chinese-hongkong
    • +
    • U+6213 CJK UNIFIED IDEOGRAPH-6213: not included in any glyphset definition
    • +
    • U+62A6 CJK UNIFIED IDEOGRAPH-62A6: not included in any glyphset definition
    • +
    • U+63ED CJK UNIFIED IDEOGRAPH-63ED: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+63F5 CJK UNIFIED IDEOGRAPH-63F5: not included in any glyphset definition
    • +
    • U+6414 CJK UNIFIED IDEOGRAPH-6414: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6451 CJK UNIFIED IDEOGRAPH-6451: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+6460 CJK UNIFIED IDEOGRAPH-6460: not included in any glyphset definition
    • +
    • U+649D CJK UNIFIED IDEOGRAPH-649D: not included in any glyphset definition
    • +
    • U+64CA CJK UNIFIED IDEOGRAPH-64CA: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+64CE CJK UNIFIED IDEOGRAPH-64CE: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6522 CJK UNIFIED IDEOGRAPH-6522: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+654E CJK UNIFIED IDEOGRAPH-654E: not included in any glyphset definition
    • +
    • U+6600 CJK UNIFIED IDEOGRAPH-6600: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6609 CJK UNIFIED IDEOGRAPH-6609: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6615 CJK UNIFIED IDEOGRAPH-6615: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+661E CJK UNIFIED IDEOGRAPH-661E: not included in any glyphset definition
    • +
    • U+6624 CJK UNIFIED IDEOGRAPH-6624: not included in any glyphset definition
    • +
    • U+662E CJK UNIFIED IDEOGRAPH-662E: not included in any glyphset definition
    • +
    • U+6631 CJK UNIFIED IDEOGRAPH-6631: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+663B CJK UNIFIED IDEOGRAPH-663B: not included in any glyphset definition
    • +
    • U+6657 CJK UNIFIED IDEOGRAPH-6657: try adding chinese-simplified
    • +
    • U+6659 CJK UNIFIED IDEOGRAPH-6659: not included in any glyphset definition
    • +
    • U+665A CJK UNIFIED IDEOGRAPH-665A: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6665 CJK UNIFIED IDEOGRAPH-6665: not included in any glyphset definition
    • +
    • U+6673 CJK UNIFIED IDEOGRAPH-6673: not included in any glyphset definition
    • +
    • U+6699 CJK UNIFIED IDEOGRAPH-6699: not included in any glyphset definition
    • +
    • U+66A0 CJK UNIFIED IDEOGRAPH-66A0: not included in any glyphset definition
    • +
    • U+66B2 CJK UNIFIED IDEOGRAPH-66B2: not included in any glyphset definition
    • +
    • U+66BF CJK UNIFIED IDEOGRAPH-66BF: try adding chinese-hongkong
    • +
    • U+66C6 CJK UNIFIED IDEOGRAPH-66C6: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+66FA CJK UNIFIED IDEOGRAPH-66FA: not included in any glyphset definition
    • +
    • U+66FB CJK UNIFIED IDEOGRAPH-66FB: not included in any glyphset definition
    • +
    • U+670E CJK UNIFIED IDEOGRAPH-670E: try adding chinese-hongkong
    • +
    • U+6766 CJK UNIFIED IDEOGRAPH-6766: not included in any glyphset definition
    • +
    • U+67BB CJK UNIFIED IDEOGRAPH-67BB: not included in any glyphset definition
    • +
    • U+67C0 CJK UNIFIED IDEOGRAPH-67C0: not included in any glyphset definition
    • +
    • U+67FA CJK UNIFIED IDEOGRAPH-67FA: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+6801 CJK UNIFIED IDEOGRAPH-6801: not included in any glyphset definition
    • +
    • U+6805 CJK UNIFIED IDEOGRAPH-6805: try adding chinese-simplified
    • +
    • U+6844 CJK UNIFIED IDEOGRAPH-6844: not included in any glyphset definition
    • +
    • U+6852 CJK UNIFIED IDEOGRAPH-6852: not included in any glyphset definition
    • +
    • U+688E CJK UNIFIED IDEOGRAPH-688E: not included in any glyphset definition
    • +
    • U+68C8 CJK UNIFIED IDEOGRAPH-68C8: not included in any glyphset definition
    • +
    • U+68CF CJK UNIFIED IDEOGRAPH-68CF: not included in any glyphset definition
    • +
    • U+6968 CJK UNIFIED IDEOGRAPH-6968: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+6998 CJK UNIFIED IDEOGRAPH-6998: not included in any glyphset definition
    • +
    • U+69E2 CJK UNIFIED IDEOGRAPH-69E2: not included in any glyphset definition
    • +
    • U+6A30 CJK UNIFIED IDEOGRAPH-6A30: not included in any glyphset definition
    • +
    • U+6A46 CJK UNIFIED IDEOGRAPH-6A46: not included in any glyphset definition
    • +
    • U+6A6B CJK UNIFIED IDEOGRAPH-6A6B: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6A73 CJK UNIFIED IDEOGRAPH-6A73: not included in any glyphset definition
    • +
    • U+6A7E CJK UNIFIED IDEOGRAPH-6A7E: try adding chinese-simplified
    • +
    • U+6AE2 CJK UNIFIED IDEOGRAPH-6AE2: not included in any glyphset definition
    • +
    • U+6AE4 CJK UNIFIED IDEOGRAPH-6AE4: not included in any glyphset definition
    • +
    • U+6B65 CJK UNIFIED IDEOGRAPH-6B65: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6B77 CJK UNIFIED IDEOGRAPH-6B77: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6BCF CJK UNIFIED IDEOGRAPH-6BCF: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6BD6 CJK UNIFIED IDEOGRAPH-6BD6: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+6C3F CJK UNIFIED IDEOGRAPH-6C3F: not included in any glyphset definition
    • +
    • U+6C5C CJK UNIFIED IDEOGRAPH-6C5C: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6C6F CJK UNIFIED IDEOGRAPH-6C6F: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+6C86 CJK UNIFIED IDEOGRAPH-6C86: try adding chinese-simplified
    • +
    • U+6CDA CJK UNIFIED IDEOGRAPH-6CDA: not included in any glyphset definition
    • +
    • U+6D04 CJK UNIFIED IDEOGRAPH-6D04: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6D6F CJK UNIFIED IDEOGRAPH-6D6F: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6D87 CJK UNIFIED IDEOGRAPH-6D87: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+6D89 CJK UNIFIED IDEOGRAPH-6D89: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6D96 CJK UNIFIED IDEOGRAPH-6D96: try adding chinese-hongkong
    • +
    • U+6DAC CJK UNIFIED IDEOGRAPH-6DAC: not included in any glyphset definition
    • +
    • U+6DCF CJK UNIFIED IDEOGRAPH-6DCF: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+6DDA CJK UNIFIED IDEOGRAPH-6DDA: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6DF2 CJK UNIFIED IDEOGRAPH-6DF2: not included in any glyphset definition
    • +
    • U+6DF8 CJK UNIFIED IDEOGRAPH-6DF8: try adding chinese-simplified
    • +
    • U+6DFC CJK UNIFIED IDEOGRAPH-6DFC: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6E27 CJK UNIFIED IDEOGRAPH-6E27: not included in any glyphset definition
    • +
    • U+6E34 CJK UNIFIED IDEOGRAPH-6E34: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6E39 CJK UNIFIED IDEOGRAPH-6E39: try adding chinese-simplified
    • +
    • U+6E3C CJK UNIFIED IDEOGRAPH-6E3C: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+6E5C CJK UNIFIED IDEOGRAPH-6E5C: not included in any glyphset definition
    • +
    • U+6EAB CJK UNIFIED IDEOGRAPH-6EAB: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6EBF CJK UNIFIED IDEOGRAPH-6EBF: not included in any glyphset definition
    • +
    • U+6F51 CJK UNIFIED IDEOGRAPH-6F51: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6F88 CJK UNIFIED IDEOGRAPH-6F88: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+6FB5 CJK UNIFIED IDEOGRAPH-6FB5: try adding chinese-hongkong
    • +
    • U+6FF5 CJK UNIFIED IDEOGRAPH-6FF5: not included in any glyphset definition
    • +
    • U+7005 CJK UNIFIED IDEOGRAPH-7005: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+7006 CJK UNIFIED IDEOGRAPH-7006: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+7007 CJK UNIFIED IDEOGRAPH-7007: not included in any glyphset definition
    • +
    • U+7028 CJK UNIFIED IDEOGRAPH-7028: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+7085 CJK UNIFIED IDEOGRAPH-7085: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+70AB CJK UNIFIED IDEOGRAPH-70AB: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+70BB CJK UNIFIED IDEOGRAPH-70BB: not included in any glyphset definition
    • +
    • U+7104 CJK UNIFIED IDEOGRAPH-7104: not included in any glyphset definition
    • +
    • U+710F CJK UNIFIED IDEOGRAPH-710F: not included in any glyphset definition
    • +
    • U+7130 CJK UNIFIED IDEOGRAPH-7130: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+7146 CJK UNIFIED IDEOGRAPH-7146: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+7147 CJK UNIFIED IDEOGRAPH-7147: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+715C CJK UNIFIED IDEOGRAPH-715C: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+71C1 CJK UNIFIED IDEOGRAPH-71C1: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+71FE CJK UNIFIED IDEOGRAPH-71FE: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+72B1 CJK UNIFIED IDEOGRAPH-72B1: not included in any glyphset definition
    • +
    • U+72BE CJK UNIFIED IDEOGRAPH-72BE: not included in any glyphset definition
    • +
    • U+72C0 CJK UNIFIED IDEOGRAPH-72C0: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+7324 CJK UNIFIED IDEOGRAPH-7324: not included in any glyphset definition
    • +
    • U+7377 CJK UNIFIED IDEOGRAPH-7377: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+73BD CJK UNIFIED IDEOGRAPH-73BD: not included in any glyphset definition
    • +
    • U+73C9 CJK UNIFIED IDEOGRAPH-73C9: try adding chinese-simplified
    • +
    • U+73D2 CJK UNIFIED IDEOGRAPH-73D2: not included in any glyphset definition
    • +
    • U+73D6 CJK UNIFIED IDEOGRAPH-73D6: not included in any glyphset definition
    • +
    • U+73E3 CJK UNIFIED IDEOGRAPH-73E3: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+73F5 CJK UNIFIED IDEOGRAPH-73F5: not included in any glyphset definition
    • +
    • U+7407 CJK UNIFIED IDEOGRAPH-7407: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+7426 CJK UNIFIED IDEOGRAPH-7426: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+7429 CJK UNIFIED IDEOGRAPH-7429: not included in any glyphset definition
    • +
    • U+742A CJK UNIFIED IDEOGRAPH-742A: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+742E CJK UNIFIED IDEOGRAPH-742E: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+7462 CJK UNIFIED IDEOGRAPH-7462: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+7489 CJK UNIFIED IDEOGRAPH-7489: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+749F CJK UNIFIED IDEOGRAPH-749F: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+7501 CJK UNIFIED IDEOGRAPH-7501: not included in any glyphset definition
    • +
    • U+752F CJK UNIFIED IDEOGRAPH-752F: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+756F CJK UNIFIED IDEOGRAPH-756F: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+7626 CJK UNIFIED IDEOGRAPH-7626: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+7682 CJK UNIFIED IDEOGRAPH-7682: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+769B CJK UNIFIED IDEOGRAPH-769B: not included in any glyphset definition
    • +
    • U+769C CJK UNIFIED IDEOGRAPH-769C: not included in any glyphset definition
    • +
    • U+769E CJK UNIFIED IDEOGRAPH-769E: not included in any glyphset definition
    • +
    • U+76A6 CJK UNIFIED IDEOGRAPH-76A6: not included in any glyphset definition
    • +
    • U+7746 CJK UNIFIED IDEOGRAPH-7746: not included in any glyphset definition
    • +
    • U+7762 CJK UNIFIED IDEOGRAPH-7762: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+7821 CJK UNIFIED IDEOGRAPH-7821: not included in any glyphset definition
    • +
    • U+784E CJK UNIFIED IDEOGRAPH-784E: not included in any glyphset definition
    • +
    • U+7864 CJK UNIFIED IDEOGRAPH-7864: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+787A CJK UNIFIED IDEOGRAPH-787A: try adding chinese-hongkong
    • +
    • U+7930 CJK UNIFIED IDEOGRAPH-7930: not included in any glyphset definition
    • +
    • U+7994 CJK UNIFIED IDEOGRAPH-7994: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+799B CJK UNIFIED IDEOGRAPH-799B: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+79B1 CJK UNIFIED IDEOGRAPH-79B1: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+7AD1 CJK UNIFIED IDEOGRAPH-7AD1: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+7AE7 CJK UNIFIED IDEOGRAPH-7AE7: try adding chinese-hongkong
    • +
    • U+7AEB CJK UNIFIED IDEOGRAPH-7AEB: not included in any glyphset definition
    • +
    • U+7B9E CJK UNIFIED IDEOGRAPH-7B9E: not included in any glyphset definition
    • +
    • U+7C1E CJK UNIFIED IDEOGRAPH-7C1E: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+7D48 CJK UNIFIED IDEOGRAPH-7D48: not included in any glyphset definition
    • +
    • U+7D5C CJK UNIFIED IDEOGRAPH-7D5C: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+7DA0 CJK UNIFIED IDEOGRAPH-7DA0: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+7DB7 CJK UNIFIED IDEOGRAPH-7DB7: not included in any glyphset definition
    • +
    • U+7DD6 CJK UNIFIED IDEOGRAPH-7DD6: not included in any glyphset definition
    • +
    • U+7DE3 CJK UNIFIED IDEOGRAPH-7DE3: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+7E52 CJK UNIFIED IDEOGRAPH-7E52: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+7E61 CJK UNIFIED IDEOGRAPH-7E61: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+7E6B CJK UNIFIED IDEOGRAPH-7E6B: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+7E8A CJK UNIFIED IDEOGRAPH-7E8A: not included in any glyphset definition
    • +
    • U+7F47 CJK UNIFIED IDEOGRAPH-7F47: not included in any glyphset definition
    • +
    • U+7FA1 CJK UNIFIED IDEOGRAPH-7FA1: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+8301 CJK UNIFIED IDEOGRAPH-8301: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+8346 CJK UNIFIED IDEOGRAPH-8346: try adding chinese-simplified
    • +
    • U+8362 CJK UNIFIED IDEOGRAPH-8362: try adding chinese-hongkong
    • +
    • U+837F CJK UNIFIED IDEOGRAPH-837F: not included in any glyphset definition
    • +
    • U+83C7 CJK UNIFIED IDEOGRAPH-83C7: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+83F6 CJK UNIFIED IDEOGRAPH-83F6: not included in any glyphset definition
    • +
    • U+840A CJK UNIFIED IDEOGRAPH-840A: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+8448 CJK UNIFIED IDEOGRAPH-8448: try adding chinese-hongkong
    • +
    • U+84B4 CJK UNIFIED IDEOGRAPH-84B4: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+84DC CJK UNIFIED IDEOGRAPH-84DC: not included in any glyphset definition
    • +
    • U+8523 CJK UNIFIED IDEOGRAPH-8523: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+853E CJK UNIFIED IDEOGRAPH-853E: not included in any glyphset definition
    • +
    • U+8553 CJK UNIFIED IDEOGRAPH-8553: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+8559 CJK UNIFIED IDEOGRAPH-8559: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+856B CJK UNIFIED IDEOGRAPH-856B: not included in any glyphset definition
    • +
    • U+85B0 CJK UNIFIED IDEOGRAPH-85B0: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+865B CJK UNIFIED IDEOGRAPH-865B: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+87EC CJK UNIFIED IDEOGRAPH-87EC: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+8807 CJK UNIFIED IDEOGRAPH-8807: not included in any glyphset definition
    • +
    • U+881F CJK UNIFIED IDEOGRAPH-881F: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+88F5 CJK UNIFIED IDEOGRAPH-88F5: not included in any glyphset definition
    • +
    • U+891C CJK UNIFIED IDEOGRAPH-891C: not included in any glyphset definition
    • +
    • U+8A12 CJK UNIFIED IDEOGRAPH-8A12: not included in any glyphset definition
    • +
    • U+8A37 CJK UNIFIED IDEOGRAPH-8A37: not included in any glyphset definition
    • +
    • U+8A79 CJK UNIFIED IDEOGRAPH-8A79: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+8AA7 CJK UNIFIED IDEOGRAPH-8AA7: not included in any glyphset definition
    • +
    • U+8ABE CJK UNIFIED IDEOGRAPH-8ABE: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+8ADF CJK UNIFIED IDEOGRAPH-8ADF: not included in any glyphset definition
    • +
    • U+8AF6 CJK UNIFIED IDEOGRAPH-8AF6: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+8B53 CJK UNIFIED IDEOGRAPH-8B53: not included in any glyphset definition
    • +
    • U+8B7F CJK UNIFIED IDEOGRAPH-8B7F: not included in any glyphset definition
    • +
    • U+8CF0 CJK UNIFIED IDEOGRAPH-8CF0: not included in any glyphset definition
    • +
    • U+8CF4 CJK UNIFIED IDEOGRAPH-8CF4: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+8D12 CJK UNIFIED IDEOGRAPH-8D12: not included in any glyphset definition
    • +
    • U+8D76 CJK UNIFIED IDEOGRAPH-8D76: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+8EC0 CJK UNIFIED IDEOGRAPH-8EC0: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+8ECF CJK UNIFIED IDEOGRAPH-8ECF: not included in any glyphset definition
    • +
    • U+9067 CJK UNIFIED IDEOGRAPH-9067: not included in any glyphset definition
    • +
    • U+90DE CJK UNIFIED IDEOGRAPH-90DE: try adding chinese-simplified
    • +
    • U+9115 CJK UNIFIED IDEOGRAPH-9115: not included in any glyphset definition
    • +
    • U+9127 CJK UNIFIED IDEOGRAPH-9127: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+91AC CJK UNIFIED IDEOGRAPH-91AC: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+91B1 CJK UNIFIED IDEOGRAPH-91B1: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+91D7 CJK UNIFIED IDEOGRAPH-91D7: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+91DA CJK UNIFIED IDEOGRAPH-91DA: not included in any glyphset definition
    • +
    • U+91DE CJK UNIFIED IDEOGRAPH-91DE: not included in any glyphset definition
    • +
    • U+91E4 CJK UNIFIED IDEOGRAPH-91E4: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+91E5 CJK UNIFIED IDEOGRAPH-91E5: try adding chinese-hongkong
    • +
    • U+91ED CJK UNIFIED IDEOGRAPH-91ED: not included in any glyphset definition
    • +
    • U+91EE CJK UNIFIED IDEOGRAPH-91EE: not included in any glyphset definition
    • +
    • U+9206 CJK UNIFIED IDEOGRAPH-9206: not included in any glyphset definition
    • +
    • U+920A CJK UNIFIED IDEOGRAPH-920A: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+9210 CJK UNIFIED IDEOGRAPH-9210: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+9239 CJK UNIFIED IDEOGRAPH-9239: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+923A CJK UNIFIED IDEOGRAPH-923A: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+923C CJK UNIFIED IDEOGRAPH-923C: try adding chinese-hongkong
    • +
    • U+9240 CJK UNIFIED IDEOGRAPH-9240: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+924E CJK UNIFIED IDEOGRAPH-924E: not included in any glyphset definition
    • +
    • U+9251 CJK UNIFIED IDEOGRAPH-9251: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+9259 CJK UNIFIED IDEOGRAPH-9259: not included in any glyphset definition
    • +
    • U+9267 CJK UNIFIED IDEOGRAPH-9267: not included in any glyphset definition
    • +
    • U+9277 CJK UNIFIED IDEOGRAPH-9277: try adding chinese-hongkong
    • +
    • U+9278 CJK UNIFIED IDEOGRAPH-9278: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+9288 CJK UNIFIED IDEOGRAPH-9288: not included in any glyphset definition
    • +
    • U+92A7 CJK UNIFIED IDEOGRAPH-92A7: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+92D0 CJK UNIFIED IDEOGRAPH-92D0: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+92D3 CJK UNIFIED IDEOGRAPH-92D3: not included in any glyphset definition
    • +
    • U+92D5 CJK UNIFIED IDEOGRAPH-92D5: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+92D7 CJK UNIFIED IDEOGRAPH-92D7: not included in any glyphset definition
    • +
    • U+92D9 CJK UNIFIED IDEOGRAPH-92D9: not included in any glyphset definition
    • +
    • U+92E0 CJK UNIFIED IDEOGRAPH-92E0: not included in any glyphset definition
    • +
    • U+92E7 CJK UNIFIED IDEOGRAPH-92E7: not included in any glyphset definition
    • +
    • U+92F9 CJK UNIFIED IDEOGRAPH-92F9: not included in any glyphset definition
    • +
    • U+92FB CJK UNIFIED IDEOGRAPH-92FB: not included in any glyphset definition
    • +
    • U+92FF CJK UNIFIED IDEOGRAPH-92FF: not included in any glyphset definition
    • +
    • U+9302 CJK UNIFIED IDEOGRAPH-9302: not included in any glyphset definition
    • +
    • U+9304 CJK UNIFIED IDEOGRAPH-9304: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+931D CJK UNIFIED IDEOGRAPH-931D: not included in any glyphset definition
    • +
    • U+931E CJK UNIFIED IDEOGRAPH-931E: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+9321 CJK UNIFIED IDEOGRAPH-9321: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+9325 CJK UNIFIED IDEOGRAPH-9325: not included in any glyphset definition
    • +
    • U+9348 CJK UNIFIED IDEOGRAPH-9348: not included in any glyphset definition
    • +
    • U+934A CJK UNIFIED IDEOGRAPH-934A: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+9357 CJK UNIFIED IDEOGRAPH-9357: try adding chinese-simplified
    • +
    • U+9370 CJK UNIFIED IDEOGRAPH-9370: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+93A4 CJK UNIFIED IDEOGRAPH-93A4: not included in any glyphset definition
    • +
    • U+93C6 CJK UNIFIED IDEOGRAPH-93C6: try adding chinese-hongkong
    • +
    • U+93DE CJK UNIFIED IDEOGRAPH-93DE: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+93F8 CJK UNIFIED IDEOGRAPH-93F8: not included in any glyphset definition
    • +
    • U+9431 CJK UNIFIED IDEOGRAPH-9431: not included in any glyphset definition
    • +
    • U+9445 CJK UNIFIED IDEOGRAPH-9445: not included in any glyphset definition
    • +
    • U+9448 CJK UNIFIED IDEOGRAPH-9448: not included in any glyphset definition
    • +
    • U+9592 CJK UNIFIED IDEOGRAPH-9592: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+969D CJK UNIFIED IDEOGRAPH-969D: not included in any glyphset definition
    • +
    • U+96AF CJK UNIFIED IDEOGRAPH-96AF: not included in any glyphset definition
    • +
    • U+9733 CJK UNIFIED IDEOGRAPH-9733: not included in any glyphset definition
    • +
    • U+973B CJK UNIFIED IDEOGRAPH-973B: not included in any glyphset definition
    • +
    • U+9743 CJK UNIFIED IDEOGRAPH-9743: not included in any glyphset definition
    • +
    • U+974D CJK UNIFIED IDEOGRAPH-974D: not included in any glyphset definition
    • +
    • U+974F CJK UNIFIED IDEOGRAPH-974F: not included in any glyphset definition
    • +
    • U+9751 CJK UNIFIED IDEOGRAPH-9751: try adding chinese-simplified
    • +
    • U+9755 CJK UNIFIED IDEOGRAPH-9755: try adding chinese-hongkong
    • +
    • U+9830 CJK UNIFIED IDEOGRAPH-9830: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+9857 CJK UNIFIED IDEOGRAPH-9857: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+985A CJK UNIFIED IDEOGRAPH-985A: not included in any glyphset definition
    • +
    • U+9865 CJK UNIFIED IDEOGRAPH-9865: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+9927 CJK UNIFIED IDEOGRAPH-9927: not included in any glyphset definition
    • +
    • U+999E CJK UNIFIED IDEOGRAPH-999E: not included in any glyphset definition
    • +
    • U+9A4E CJK UNIFIED IDEOGRAPH-9A4E: not included in any glyphset definition
    • +
    • U+9A52 CJK UNIFIED IDEOGRAPH-9A52: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+9AD9 CJK UNIFIED IDEOGRAPH-9AD9: try adding chinese-simplified
    • +
    • U+9ADC CJK UNIFIED IDEOGRAPH-9ADC: not included in any glyphset definition
    • +
    • U+9B72 CJK UNIFIED IDEOGRAPH-9B72: not included in any glyphset definition
    • +
    • U+9B75 CJK UNIFIED IDEOGRAPH-9B75: not included in any glyphset definition
    • +
    • U+9B8F CJK UNIFIED IDEOGRAPH-9B8F: try adding chinese-hongkong
    • +
    • U+9BB1 CJK UNIFIED IDEOGRAPH-9BB1: not included in any glyphset definition
    • +
    • U+9BBB CJK UNIFIED IDEOGRAPH-9BBB: not included in any glyphset definition
    • +
    • U+9C00 CJK UNIFIED IDEOGRAPH-9C00: not included in any glyphset definition
    • +
    • U+9D6B CJK UNIFIED IDEOGRAPH-9D6B: not included in any glyphset definition
    • +
    • U+9D70 CJK UNIFIED IDEOGRAPH-9D70: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+9DD7 CJK UNIFIED IDEOGRAPH-9DD7: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+9E19 CJK UNIFIED IDEOGRAPH-9E19: not included in any glyphset definition
    • +
    • U+9E7C CJK UNIFIED IDEOGRAPH-9E7C: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+9EB4 CJK UNIFIED IDEOGRAPH-9EB4: try adding one of: chinese-traditional, chinese-hongkong
    • +
    • U+9EB5 CJK UNIFIED IDEOGRAPH-9EB5: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+9EC3 CJK UNIFIED IDEOGRAPH-9EC3: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+9ED1 CJK UNIFIED IDEOGRAPH-9ED1: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong
    • +
    • U+F91D CJK COMPATIBILITY IDEOGRAPH-F91D: not included in any glyphset definition
    • +
    • U+F928 CJK COMPATIBILITY IDEOGRAPH-F928: not included in any glyphset definition
    • +
    • U+F929 CJK COMPATIBILITY IDEOGRAPH-F929: not included in any glyphset definition
    • +
    • U+F936 CJK COMPATIBILITY IDEOGRAPH-F936: not included in any glyphset definition
    • +
    • U+F999 CJK COMPATIBILITY IDEOGRAPH-F999: not included in any glyphset definition
    • +
    • U+F9C3 CJK COMPATIBILITY IDEOGRAPH-F9C3: not included in any glyphset definition
    • +
    • U+F9D0 CJK COMPATIBILITY IDEOGRAPH-F9D0: not included in any glyphset definition
    • +
    • U+F9DC CJK COMPATIBILITY IDEOGRAPH-F9DC: not included in any glyphset definition
    • +
    • U+FA0E CJK COMPATIBILITY IDEOGRAPH-FA0E: not included in any glyphset definition
    • +
    • U+FA0F CJK COMPATIBILITY IDEOGRAPH-FA0F: not included in any glyphset definition
    • +
    • U+FA10 CJK COMPATIBILITY IDEOGRAPH-FA10: not included in any glyphset definition
    • +
    • U+FA11 CJK COMPATIBILITY IDEOGRAPH-FA11: not included in any glyphset definition
    • +
    • U+FA12 CJK COMPATIBILITY IDEOGRAPH-FA12: not included in any glyphset definition
    • +
    • U+FA13 CJK COMPATIBILITY IDEOGRAPH-FA13: not included in any glyphset definition
    • +
    • U+FA14 CJK COMPATIBILITY IDEOGRAPH-FA14: not included in any glyphset definition
    • +
    • U+FA15 CJK COMPATIBILITY IDEOGRAPH-FA15: not included in any glyphset definition
    • +
    • U+FA16 CJK COMPATIBILITY IDEOGRAPH-FA16: not included in any glyphset definition
    • +
    • U+FA17 CJK COMPATIBILITY IDEOGRAPH-FA17: not included in any glyphset definition
    • +
    • U+FA18 CJK COMPATIBILITY IDEOGRAPH-FA18: not included in any glyphset definition
    • +
    • U+FA19 CJK COMPATIBILITY IDEOGRAPH-FA19: not included in any glyphset definition
    • +
    • U+FA1A CJK COMPATIBILITY IDEOGRAPH-FA1A: not included in any glyphset definition
    • +
    • U+FA1B CJK COMPATIBILITY IDEOGRAPH-FA1B: not included in any glyphset definition
    • +
    • U+FA1C CJK COMPATIBILITY IDEOGRAPH-FA1C: not included in any glyphset definition
    • +
    • U+FA1D CJK COMPATIBILITY IDEOGRAPH-FA1D: not included in any glyphset definition
    • +
    • U+FA1E CJK COMPATIBILITY IDEOGRAPH-FA1E: not included in any glyphset definition
    • +
    • U+FA1F CJK COMPATIBILITY IDEOGRAPH-FA1F: not included in any glyphset definition
    • +
    • U+FA20 CJK COMPATIBILITY IDEOGRAPH-FA20: not included in any glyphset definition
    • +
    • U+FA21 CJK COMPATIBILITY IDEOGRAPH-FA21: not included in any glyphset definition
    • +
    • U+FA22 CJK COMPATIBILITY IDEOGRAPH-FA22: not included in any glyphset definition
    • +
    • U+FA23 CJK COMPATIBILITY IDEOGRAPH-FA23: not included in any glyphset definition
    • +
    • U+FA24 CJK COMPATIBILITY IDEOGRAPH-FA24: not included in any glyphset definition
    • +
    • U+FA25 CJK COMPATIBILITY IDEOGRAPH-FA25: not included in any glyphset definition
    • +
    • U+FA26 CJK COMPATIBILITY IDEOGRAPH-FA26: not included in any glyphset definition
    • +
    • U+FA27 CJK COMPATIBILITY IDEOGRAPH-FA27: not included in any glyphset definition
    • +
    • U+FA28 CJK COMPATIBILITY IDEOGRAPH-FA28: not included in any glyphset definition
    • +
    • U+FA29 CJK COMPATIBILITY IDEOGRAPH-FA29: not included in any glyphset definition
    • +
    • U+FA2A CJK COMPATIBILITY IDEOGRAPH-FA2A: not included in any glyphset definition
    • +
    • U+FA2B CJK COMPATIBILITY IDEOGRAPH-FA2B: not included in any glyphset definition
    • +
    • U+FA2C CJK COMPATIBILITY IDEOGRAPH-FA2C: not included in any glyphset definition
    • +
    • U+FA2D CJK COMPATIBILITY IDEOGRAPH-FA2D: not included in any glyphset definition
    • +
    • U+FA30 CJK COMPATIBILITY IDEOGRAPH-FA30: not included in any glyphset definition
    • +
    • U+FA31 CJK COMPATIBILITY IDEOGRAPH-FA31: not included in any glyphset definition
    • +
    • U+FA33 CJK COMPATIBILITY IDEOGRAPH-FA33: not included in any glyphset definition
    • +
    • U+FA34 CJK COMPATIBILITY IDEOGRAPH-FA34: not included in any glyphset definition
    • +
    • U+FA35 CJK COMPATIBILITY IDEOGRAPH-FA35: not included in any glyphset definition
    • +
    • U+FA36 CJK COMPATIBILITY IDEOGRAPH-FA36: not included in any glyphset definition
    • +
    • U+FA37 CJK COMPATIBILITY IDEOGRAPH-FA37: not included in any glyphset definition
    • +
    • U+FA38 CJK COMPATIBILITY IDEOGRAPH-FA38: not included in any glyphset definition
    • +
    • U+FA3A CJK COMPATIBILITY IDEOGRAPH-FA3A: not included in any glyphset definition
    • +
    • U+FA3B CJK COMPATIBILITY IDEOGRAPH-FA3B: not included in any glyphset definition
    • +
    • U+FA3D CJK COMPATIBILITY IDEOGRAPH-FA3D: not included in any glyphset definition
    • +
    • U+FA3F CJK COMPATIBILITY IDEOGRAPH-FA3F: not included in any glyphset definition
    • +
    • U+FA40 CJK COMPATIBILITY IDEOGRAPH-FA40: not included in any glyphset definition
    • +
    • U+FA41 CJK COMPATIBILITY IDEOGRAPH-FA41: not included in any glyphset definition
    • +
    • U+FA43 CJK COMPATIBILITY IDEOGRAPH-FA43: not included in any glyphset definition
    • +
    • U+FA44 CJK COMPATIBILITY IDEOGRAPH-FA44: not included in any glyphset definition
    • +
    • U+FA45 CJK COMPATIBILITY IDEOGRAPH-FA45: not included in any glyphset definition
    • +
    • U+FA46 CJK COMPATIBILITY IDEOGRAPH-FA46: not included in any glyphset definition
    • +
    • U+FA47 CJK COMPATIBILITY IDEOGRAPH-FA47: not included in any glyphset definition
    • +
    • U+FA48 CJK COMPATIBILITY IDEOGRAPH-FA48: not included in any glyphset definition
    • +
    • U+FA4A CJK COMPATIBILITY IDEOGRAPH-FA4A: not included in any glyphset definition
    • +
    • U+FA4B CJK COMPATIBILITY IDEOGRAPH-FA4B: not included in any glyphset definition
    • +
    • U+FA4C CJK COMPATIBILITY IDEOGRAPH-FA4C: not included in any glyphset definition
    • +
    • U+FA4D CJK COMPATIBILITY IDEOGRAPH-FA4D: not included in any glyphset definition
    • +
    • U+FA4E CJK COMPATIBILITY IDEOGRAPH-FA4E: not included in any glyphset definition
    • +
    • U+FA4F CJK COMPATIBILITY IDEOGRAPH-FA4F: not included in any glyphset definition
    • +
    • U+FA50 CJK COMPATIBILITY IDEOGRAPH-FA50: not included in any glyphset definition
    • +
    • U+FA51 CJK COMPATIBILITY IDEOGRAPH-FA51: not included in any glyphset definition
    • +
    • U+FA52 CJK COMPATIBILITY IDEOGRAPH-FA52: not included in any glyphset definition
    • +
    • U+FA53 CJK COMPATIBILITY IDEOGRAPH-FA53: not included in any glyphset definition
    • +
    • U+FA54 CJK COMPATIBILITY IDEOGRAPH-FA54: not included in any glyphset definition
    • +
    • U+FA55 CJK COMPATIBILITY IDEOGRAPH-FA55: not included in any glyphset definition
    • +
    • U+FA56 CJK COMPATIBILITY IDEOGRAPH-FA56: not included in any glyphset definition
    • +
    • U+FA57 CJK COMPATIBILITY IDEOGRAPH-FA57: not included in any glyphset definition
    • +
    • U+FA59 CJK COMPATIBILITY IDEOGRAPH-FA59: not included in any glyphset definition
    • +
    • U+FA5A CJK COMPATIBILITY IDEOGRAPH-FA5A: not included in any glyphset definition
    • +
    • U+FA5B CJK COMPATIBILITY IDEOGRAPH-FA5B: not included in any glyphset definition
    • +
    • U+FA5C CJK COMPATIBILITY IDEOGRAPH-FA5C: not included in any glyphset definition
    • +
    • U+FA5F CJK COMPATIBILITY IDEOGRAPH-FA5F: not included in any glyphset definition
    • +
    • U+FA61 CJK COMPATIBILITY IDEOGRAPH-FA61: not included in any glyphset definition
    • +
    • U+FA62 CJK COMPATIBILITY IDEOGRAPH-FA62: not included in any glyphset definition
    • +
    • U+FA63 CJK COMPATIBILITY IDEOGRAPH-FA63: not included in any glyphset definition
    • +
    • U+FA64 CJK COMPATIBILITY IDEOGRAPH-FA64: not included in any glyphset definition
    • +
    • U+FA65 CJK COMPATIBILITY IDEOGRAPH-FA65: not included in any glyphset definition
    • +
    • U+FA67 CJK COMPATIBILITY IDEOGRAPH-FA67: not included in any glyphset definition
    • +
    • U+FA68 CJK COMPATIBILITY IDEOGRAPH-FA68: not included in any glyphset definition
    • +
    • U+FA69 CJK COMPATIBILITY IDEOGRAPH-FA69: not included in any glyphset definition
    • +
    • U+FA6A CJK COMPATIBILITY IDEOGRAPH-FA6A: not included in any glyphset definition
    • +
    • U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition
    • +
    • U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition
    • +
    • U+FE10 PRESENTATION FORM FOR VERTICAL COMMA: not included in any glyphset definition
    • +
    • U+FE11 PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA: not included in any glyphset definition
    • +
    • U+FE12 PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP: try adding nushu
    • +
    • U+FE31 PRESENTATION FORM FOR VERTICAL EM DASH: try adding chinese-simplified
    • +
    • U+FE32 PRESENTATION FORM FOR VERTICAL EN DASH: not included in any glyphset definition
    • +
    • U+FE33 PRESENTATION FORM FOR VERTICAL LOW LINE: not included in any glyphset definition
    • +
    • U+FE35 PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS: try adding chinese-simplified
    • +
    • U+FE36 PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS: try adding chinese-simplified
    • +
    • U+FE37 PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET: not included in any glyphset definition
    • +
    • U+FE38 PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET: not included in any glyphset definition
    • +
    • U+FE39 PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET: try adding chinese-simplified
    • +
    • U+FE3A PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET: not included in any glyphset definition
    • +
    • U+FE3B PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET: not included in any glyphset definition
    • +
    • U+FE3C PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET: not included in any glyphset definition
    • +
    • U+FE3D PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET: try adding one of: mongolian, chinese-simplified
    • +
    • U+FE3E PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET: try adding one of: mongolian, chinese-simplified
    • +
    • U+FE3F PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET: try adding chinese-simplified
    • +
    • U+FE40 PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET: try adding chinese-simplified
    • +
    • U+FE41 PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET: try adding one of: mongolian, chinese-simplified
    • +
    • U+FE42 PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET: try adding mongolian
    • +
    • U+FE43 PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET: try adding one of: mongolian, chinese-simplified
    • +
    • U+FE44 PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET: try adding mongolian
    • +
    • U+FE47 PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET: not included in any glyphset definition
    • +
    • U+FE48 PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET: not included in any glyphset definition
    • +
    • U+FF02 FULLWIDTH QUOTATION MARK: try adding one of: chinese-simplified, yi
    • +
    • U+FF07 FULLWIDTH APOSTROPHE: try adding chinese-simplified
    • +
    • U+FF0D FULLWIDTH HYPHEN-MINUS: try adding chinese-simplified
    • +
    • U+FF3C FULLWIDTH REVERSE SOLIDUS: try adding chinese-simplified
    • +
    • U+FF5E FULLWIDTH TILDE: try adding one of: chinese-simplified, yi
    • +
    • U+FF61 HALFWIDTH IDEOGRAPHIC FULL STOP: try adding yi
    • +
    • U+FF62 HALFWIDTH LEFT CORNER BRACKET: try adding yi
    • +
    • U+FF63 HALFWIDTH RIGHT CORNER BRACKET: try adding yi
    • +
    • U+FF64 HALFWIDTH IDEOGRAPHIC COMMA: try adding yi
    • +
    • U+FF65 HALFWIDTH KATAKANA MIDDLE DOT: try adding yi
    • +
    • U+FF66 HALFWIDTH KATAKANA LETTER WO: not included in any glyphset definition
    • +
    • U+FF67 HALFWIDTH KATAKANA LETTER SMALL A: not included in any glyphset definition
    • +
    • U+FF68 HALFWIDTH KATAKANA LETTER SMALL I: not included in any glyphset definition
    • +
    • U+FF69 HALFWIDTH KATAKANA LETTER SMALL U: not included in any glyphset definition
    • +
    • U+FF6A HALFWIDTH KATAKANA LETTER SMALL E: not included in any glyphset definition
    • +
    • U+FF6B HALFWIDTH KATAKANA LETTER SMALL O: not included in any glyphset definition
    • +
    • U+FF6C HALFWIDTH KATAKANA LETTER SMALL YA: not included in any glyphset definition
    • +
    • U+FF6D HALFWIDTH KATAKANA LETTER SMALL YU: not included in any glyphset definition
    • +
    • U+FF6E HALFWIDTH KATAKANA LETTER SMALL YO: not included in any glyphset definition
    • +
    • U+FF6F HALFWIDTH KATAKANA LETTER SMALL TU: not included in any glyphset definition
    • +
    • U+FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK: not included in any glyphset definition
    • +
    • U+FF71 HALFWIDTH KATAKANA LETTER A: not included in any glyphset definition
    • +
    • U+FF72 HALFWIDTH KATAKANA LETTER I: not included in any glyphset definition
    • +
    • U+FF73 HALFWIDTH KATAKANA LETTER U: not included in any glyphset definition
    • +
    • U+FF74 HALFWIDTH KATAKANA LETTER E: not included in any glyphset definition
    • +
    • U+FF75 HALFWIDTH KATAKANA LETTER O: not included in any glyphset definition
    • +
    • U+FF76 HALFWIDTH KATAKANA LETTER KA: not included in any glyphset definition
    • +
    • U+FF77 HALFWIDTH KATAKANA LETTER KI: not included in any glyphset definition
    • +
    • U+FF78 HALFWIDTH KATAKANA LETTER KU: not included in any glyphset definition
    • +
    • U+FF79 HALFWIDTH KATAKANA LETTER KE: not included in any glyphset definition
    • +
    • U+FF7A HALFWIDTH KATAKANA LETTER KO: not included in any glyphset definition
    • +
    • U+FF7B HALFWIDTH KATAKANA LETTER SA: not included in any glyphset definition
    • +
    • U+FF7C HALFWIDTH KATAKANA LETTER SI: not included in any glyphset definition
    • +
    • U+FF7D HALFWIDTH KATAKANA LETTER SU: not included in any glyphset definition
    • +
    • U+FF7E HALFWIDTH KATAKANA LETTER SE: not included in any glyphset definition
    • +
    • U+FF7F HALFWIDTH KATAKANA LETTER SO: not included in any glyphset definition
    • +
    • U+FF80 HALFWIDTH KATAKANA LETTER TA: not included in any glyphset definition
    • +
    • U+FF81 HALFWIDTH KATAKANA LETTER TI: not included in any glyphset definition
    • +
    • U+FF82 HALFWIDTH KATAKANA LETTER TU: not included in any glyphset definition
    • +
    • U+FF83 HALFWIDTH KATAKANA LETTER TE: not included in any glyphset definition
    • +
    • U+FF84 HALFWIDTH KATAKANA LETTER TO: not included in any glyphset definition
    • +
    • U+FF85 HALFWIDTH KATAKANA LETTER NA: not included in any glyphset definition
    • +
    • U+FF86 HALFWIDTH KATAKANA LETTER NI: not included in any glyphset definition
    • +
    • U+FF87 HALFWIDTH KATAKANA LETTER NU: not included in any glyphset definition
    • +
    • U+FF88 HALFWIDTH KATAKANA LETTER NE: not included in any glyphset definition
    • +
    • U+FF89 HALFWIDTH KATAKANA LETTER NO: not included in any glyphset definition
    • +
    • U+FF8A HALFWIDTH KATAKANA LETTER HA: not included in any glyphset definition
    • +
    • U+FF8B HALFWIDTH KATAKANA LETTER HI: not included in any glyphset definition
    • +
    • U+FF8C HALFWIDTH KATAKANA LETTER HU: not included in any glyphset definition
    • +
    • U+FF8D HALFWIDTH KATAKANA LETTER HE: not included in any glyphset definition
    • +
    • U+FF8E HALFWIDTH KATAKANA LETTER HO: not included in any glyphset definition
    • +
    • U+FF8F HALFWIDTH KATAKANA LETTER MA: not included in any glyphset definition
    • +
    • U+FF90 HALFWIDTH KATAKANA LETTER MI: not included in any glyphset definition
    • +
    • U+FF91 HALFWIDTH KATAKANA LETTER MU: not included in any glyphset definition
    • +
    • U+FF92 HALFWIDTH KATAKANA LETTER ME: not included in any glyphset definition
    • +
    • U+FF93 HALFWIDTH KATAKANA LETTER MO: not included in any glyphset definition
    • +
    • U+FF94 HALFWIDTH KATAKANA LETTER YA: not included in any glyphset definition
    • +
    • U+FF95 HALFWIDTH KATAKANA LETTER YU: not included in any glyphset definition
    • +
    • U+FF96 HALFWIDTH KATAKANA LETTER YO: not included in any glyphset definition
    • +
    • U+FF97 HALFWIDTH KATAKANA LETTER RA: not included in any glyphset definition
    • +
    • U+FF98 HALFWIDTH KATAKANA LETTER RI: not included in any glyphset definition
    • +
    • U+FF99 HALFWIDTH KATAKANA LETTER RU: not included in any glyphset definition
    • +
    • U+FF9A HALFWIDTH KATAKANA LETTER RE: not included in any glyphset definition
    • +
    • U+FF9B HALFWIDTH KATAKANA LETTER RO: not included in any glyphset definition
    • +
    • U+FF9C HALFWIDTH KATAKANA LETTER WA: not included in any glyphset definition
    • +
    • U+FF9D HALFWIDTH KATAKANA LETTER N: not included in any glyphset definition
    • +
    • U+FF9E HALFWIDTH KATAKANA VOICED SOUND MARK: not included in any glyphset definition
    • +
    • U+FF9F HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK: not included in any glyphset definition
    • +
    • U+FFE0 FULLWIDTH CENT SIGN: try adding chinese-simplified
    • +
    • U+FFE1 FULLWIDTH POUND SIGN: try adding chinese-simplified
    • +
    • U+FFE2 FULLWIDTH NOT SIGN: not included in any glyphset definition
    • +
    • U+FFE4 FULLWIDTH BROKEN BAR: not included in any glyphset definition
    • +
    • U+FFE8 HALFWIDTH FORMS LIGHT VERTICAL: not included in any glyphset definition
    • +
    • U+1F100 DIGIT ZERO FULL STOP: try adding symbols
    • +
    • U+20B9F CJK UNIFIED IDEOGRAPH-20B9F: not included in any glyphset definition
    • +
    • U+21A1A CJK UNIFIED IDEOGRAPH-21A1A: not included in any glyphset definition
    • +
    • U+243D0 CJK UNIFIED IDEOGRAPH-243D0: not included in any glyphset definition
    • +
    • U+25874 CJK UNIFIED IDEOGRAPH-25874: not included in any glyphset definition
    • +
    • U+28CDD CJK UNIFIED IDEOGRAPH-28CDD: not included in any glyphset definition
    • +
    • U+28EF6 CJK UNIFIED IDEOGRAPH-28EF6: not included in any glyphset definition
    • +
    • U+2F80F CJK COMPATIBILITY IDEOGRAPH-2F80F: not included in any glyphset definition
    • +
    • U+2F884 CJK COMPATIBILITY IDEOGRAPH-2F884: not included in any glyphset definition
    • +
    • U+2F8D3 CJK COMPATIBILITY IDEOGRAPH-2F8D3: not included in any glyphset definition
    • +
    • U+2F920 CJK COMPATIBILITY IDEOGRAPH-2F920: not included in any glyphset definition
    • +
    +

    Or you can add the above codepoints to one of the subsets supported by the font: cyrillic, japanese, latin, latin-ext, menu [code: unreachable-subsetting]

    +
+

Check OFL body text is correct.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/license/OFL_body_text>
+ +
🔥 YujiSyuku-Regular.ttf
  • 🔥 FAIL

    The OFL.txt body text is incorrect. Please use https://github.com/googlefonts/Unified-Font-Repository/blob/main/OFL.txt as a template. You should only modify the first line. [code: incorrect-ofl-body-text]

    +
+

Ensure files are not too large.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/file_size>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    Font file is 8.0Mb; ideally it should be less than 1.0Mb [code: large-font]

    +
+

Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/gasp>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    The gasp range 0xFFFF value 0x0A should be set to 0x0F. [code: unset-flags]

    +
+

METADATA.pb: Check URL on copyright string is the same as in repository_url field.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/consistent_repo_urls>
+ +
🔥 YujiSyuku-Regular.ttf
  • 🔥 FAIL

    Value of repository_url field is

    +

    But font copyright string has: https://github.com/Kinutafontfactory/Yuji +[code: mismatch]

    +
+

METADATA.pb: Check for primary_script

+
Check ID: <FontBakeryCheck:com.google.fonts/check/metadata/primary_script>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    METADATA.pb: primary_script field should be 'Hani' but is missing. +Make sure that 'Hani' is actually the correct one (out of Jpan, Hani, Hant, Hans). [code: missing-primary-script]

    +
+

Font enables smart dropout control in "prep" table instructions?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/smart_dropout>
+ +
🔥 YujiSyuku-Regular.ttf
  • 🔥 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]

    +
+

Are there caret positions declared for every ligature?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/ligature_carets>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    GDEF table is missing, but it is mandatory to declare it on fonts that provide ligature glyphs because the caret (text cursor) positioning for each ligature must be provided in this table. [code: GDEF-missing]

    +
+

A static fonts directory with at least two fonts must accompany variable fonts

+
Check ID: <FontBakeryCheck:com.google.fonts/check/repo/vf_has_static_fonts>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    Please consider adding a subdirectory called "static/" and including in it static font files. [code: missing]

    +
+

On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/description/family_update>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo. +Please consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]

    +
+

Ensure fonts have ScriptLangTags declared on the 'meta' table.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/meta/script_lang_tags>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    This font file does not have a 'meta' table. [code: lacks-meta-table]

    +
+

Section: Universal

+⚠️⚠️⚠️⚠️⚠️⚠️⚠️⏩⏩⏩⏩⏩⏩⏩ℹ️ℹ️ +

Font has **proper** whitespace glyph names?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/whitespace_glyphnames>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    Glyph 0x00A0 is called "nbspace": Change to "uni00A0" [code: not-recommended-00a0]

    +
+

Glyph names are all valid?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/valid_glyphnames>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    The following glyph names may be too long for some legacy systems which may expect a maximum 31-characters length limit: +blacklenticularbracketleft.half.rotat, blacklenticularbracketright.half, blacklenticularbracketright.half.rotat, blacklenticularbracketright.vert, boxDownHeavyAndHorizontalLight.half, boxDownHeavyAndHorizontalLight.half.rotat, boxDownHeavyAndLeftLight.half.rotat, boxDownHeavyAndLeftUpLight.half.rotat, boxDownHeavyAndRightLight.half.rotat, boxDownHeavyAndRightUpLight.half, boxDownHeavyAndRightUpLight.half.rotat, boxDownHeavyAndUpHorizontalLight, boxDownHeavyAndUpHorizontalLight.half, boxDownHeavyAndUpHorizontalLight.half.rotat, boxDownLightAndHorizontalHeavy.half, boxDownLightAndHorizontalHeavy.half.rotat, boxDownLightAndLeftHeavy.half.rotat, boxDownLightAndLeftUpHeavy.half.rotat, boxDownLightAndRightHeavy.half.rotat, boxDownLightAndRightUpHeavy.half, boxDownLightAndRightUpHeavy.half.rotat, boxDownLightAndUpHorizontalHeavy, boxDownLightAndUpHorizontalHeavy.half, boxDownLightAndUpHorizontalHeavy.half.rotat, boxHeavyDownAndHorizontal.half.rotat, boxHeavyQuadrupleDashHorizontal.half, boxHeavyQuadrupleDashHorizontal.half.rotat, boxHeavyQuadrupleDashVertical.half, boxHeavyQuadrupleDashVertical.half.rotat, boxHeavyTripleDashHorizontal.half, boxHeavyTripleDashHorizontal.half.rotat, boxHeavyTripleDashVertical.half.rotat, boxHeavyUpAndHorizontal.half.rotat, boxHeavyVerticalAndHorizontal.half, boxHeavyVerticalAndHorizontal.half.rotat, boxHeavyVerticalAndLeft.half.rotat, boxHeavyVerticalAndRight.half.rotat, boxLeftDownHeavyAndRightUpLight.half, boxLeftDownHeavyAndRightUpLight.half.rotat, boxLeftHeavyAndRightDownLight.half, boxLeftHeavyAndRightDownLight.half.rotat, boxLeftHeavyAndRightUpLight.half, boxLeftHeavyAndRightUpLight.half.rotat, boxLeftHeavyAndRightVerticalLight, boxLeftHeavyAndRightVerticalLight.half, boxLeftHeavyAndRightVerticalLight.half.rotat, boxLeftLightAndRightDownHeavy.half, boxLeftLightAndRightDownHeavy.half.rotat, boxLeftLightAndRightUpHeavy.half, boxLeftLightAndRightUpHeavy.half.rotat, boxLeftLightAndRightVerticalHeavy, boxLeftLightAndRightVerticalHeavy.half, boxLeftLightAndRightVerticalHeavy.half.rotat, boxLeftUpHeavyAndRightDownLight.half, boxLeftUpHeavyAndRightDownLight.half.rotat, boxLightDiagonalUpperLeftToLowerRight, boxLightDiagonalUpperRightToLowerLeft, boxLightDownAndHorizontal.half.rotat, boxLightQuadrupleDashHorizontal.half, boxLightQuadrupleDashHorizontal.half.rotat, boxLightQuadrupleDashVertical.half, boxLightQuadrupleDashVertical.half.rotat, boxLightTripleDashHorizontal.half, boxLightTripleDashHorizontal.half.rotat, boxLightTripleDashVertical.half.rotat, boxLightUpAndHorizontal.half.rotat, boxLightVerticalAndHorizontal.half, boxLightVerticalAndHorizontal.half.rotat, boxLightVerticalAndLeft.half.rotat, boxLightVerticalAndRight.half.rotat, boxRightDownHeavyAndLeftUpLight.half, boxRightDownHeavyAndLeftUpLight.half.rotat, boxRightHeavyAndLeftDownLight.half, boxRightHeavyAndLeftDownLight.half.rotat, boxRightHeavyAndLeftUpLight.half, boxRightHeavyAndLeftUpLight.half.rotat, boxRightHeavyAndLeftVerticalLight, boxRightHeavyAndLeftVerticalLight.half, boxRightHeavyAndLeftVerticalLight.half.rotat, boxRightLightAndLeftDownHeavy.half, boxRightLightAndLeftDownHeavy.half.rotat, boxRightLightAndLeftUpHeavy.half, boxRightLightAndLeftUpHeavy.half.rotat, boxRightLightAndLeftVerticalHeavy, boxRightLightAndLeftVerticalHeavy.half, boxRightLightAndLeftVerticalHeavy.half.rotat, boxRightUpHeavyAndLeftDownLight.half, boxRightUpHeavyAndLeftDownLight.half.rotat, boxUpHeavyAndDownHorizontalLight, boxUpHeavyAndDownHorizontalLight.half, boxUpHeavyAndDownHorizontalLight.half.rotat, boxUpHeavyAndHorizontalLight.half, boxUpHeavyAndHorizontalLight.half.rotat, boxUpHeavyAndLeftDownLight.half.rotat, boxUpHeavyAndLeftLight.half.rotat, boxUpHeavyAndRightDownLight.half, boxUpHeavyAndRightDownLight.half.rotat, boxUpHeavyAndRightLight.half.rotat, boxUpLightAndDownHorizontalHeavy, boxUpLightAndDownHorizontalHeavy.half, boxUpLightAndDownHorizontalHeavy.half.rotat, boxUpLightAndHorizontalHeavy.half, boxUpLightAndHorizontalHeavy.half.rotat, boxUpLightAndLeftDownHeavy.half.rotat, boxUpLightAndLeftHeavy.half.rotat, boxUpLightAndRightDownHeavy.half, boxUpLightAndRightDownHeavy.half.rotat, boxUpLightAndRightHeavy.half.rotat, boxVerticalHeavyAndHorizontalLight, boxVerticalHeavyAndHorizontalLight.half, boxVerticalHeavyAndHorizontalLight.half.rotat, boxVerticalHeavyAndLeftLight.half, boxVerticalHeavyAndLeftLight.half.rotat, boxVerticalHeavyAndRightLight.half, boxVerticalHeavyAndRightLight.half.rotat, boxVerticalLightAndHorizontalHeavy, boxVerticalLightAndHorizontalHeavy.half, boxVerticalLightAndHorizontalHeavy.half.rotat, boxVerticalLightAndLeftHeavy.half, boxVerticalLightAndLeftHeavy.half.rotat, boxVerticalLightAndRightHeavy.half, boxVerticalLightAndRightHeavy.half.rotat, boxVerticalSingleAndHorizontalDouble, leftcurlybracketmiddlepiece.vert, leftcurlybracketupperhook_leftcurlybracketlowerhook, leftcurlybracketupperhook_leftcurlybracketlowerhook.vert, quotedoubleprimeReversed.full.vert, quotedoubleprimeReversed.half.rotat, rightcurlybracketmiddlepiece.vert, rightcurlybracketupperhook_rightcurlybracketlowerhook, rightcurlybracketupperhook_rightcurlybracketlowerhook.vert, tortoiseshellbracketleft.half.rotat, tortoiseshellbracketright.half.rotat, whitecornerbracketleft.half.rotat and whitecornerbracketright.half.rotat [code: legacy-long-names]

    +
+

Check font contains no unreachable glyphs

+
Check ID: <FontBakeryCheck:com.google.fonts/check/unreachable_glyphs>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    The following glyphs could not be reached by codepoint or substitution rules:

    +
    - K_K_period
    +
    +- Ten_Fiveroman
    +
    +- Ten_Fourroman
    +
    +- Ten_Threeroman
    +
    +- a_prolonged_rukata
    +
    +- angle.full
    +
    +- angle.mac
    +
    +- approxequalorimage.full
    +
    +- because.full
    +
    +- blackCircle.alt
    +
    +- contourintegral.full
    +
    +- dblintegral.full
    +
    +- element.full
    +
    +- emptyBlock
    +
    +- equivalence.full
    +
    +- existential.full
    +
    +- getamark.rotat
    +
    +- gradient.full
    +
    +- greateroverequal.full
    +
    +- haitsu
    +
    +- herutsu
    +
    +- hoon
    +
    +- inchi
    +
    +- infinity.full
    +
    +- intersection.alt
    +
    +- intersection.full
    +
    +- koopo
    +
    +- leftRightDoubleArrow.full
    +
    +- leftcurlybracketlowerhook.vert
    +
    +- leftcurlybracketmiddlepiece.vert
    +
    +- leftcurlybracketupperhook.vert
    +
    +- leftcurlybracketupperhook_leftcurlybracketlowerhook
    +
    +- leftcurlybracketupperhook_leftcurlybracketlowerhook.vert
    +
    +- lessoverequal.full
    +
    +- logicaland.full
    +
    +- logicalor.full
    +
    +- mars.alt
    +
    +- minute.full
    +
    +- muchgreater.full
    +
    +- muchless.full
    +
    +- notequal.full
    +
    +- orthogonal.full
    +
    +- partialdiff.full
    +
    +- peeji
    +
    +- perpendicular.mac
    +
    +- proportional.full
    +
    +- quotebottomright
    +
    +- quotedblbottomleft
    +
    +- quotedblbottomright
    +
    +- quotedbltopleft
    +
    +- quotetopleft
    +
    +- radical.full
    +
    +- radical.mac
    +
    +- reflexsubset.full
    +
    +- reflexsuperset.full
    +
    +- reversedtilde.full
    +
    +- rightDoubleArrow.full
    +
    +- rightcurlybracketlowerhook.vert
    +
    +- rightcurlybracketmiddlepiece.vert
    +
    +- rightcurlybracketupperhook.vert
    +
    +- rightcurlybracketupperhook_rightcurlybracketlowerhook
    +
    +- rightcurlybracketupperhook_rightcurlybracketlowerhook.vert
    +
    +- righttriangle.full
    +
    +- second.full
    +
    +- sento
    +
    +- space.half
    +
    +- spacehira.half
    +
    +- spacekata.half
    +
    +- subset.full
    +
    +- suchthat.full
    +
    +- summation.full
    +
    +- superset.full
    +
    +- ten_fiveroman
    +
    +- ten_fourroman
    +
    +- ten_threeroman
    +
    +- therefore.full
    +
    +- tripleintegral.full
    +
    +- uni3318.alt
    +
    +- uni51DE.vari5
    +
    +- uni5307.vari2
    +
    +- uni5370.box
    +
    +- uni585A.vari3
    +
    +- uni5927.circled
    +
    +- uni5C0F.circled
    +
    +- uni63A7.circled
    +
    +- uni661E.vari2
    +
    +- uni6801.vari2
    +
    +- uni8612.vari2
    +
    +- uni8B7F.vari1
    +
    +- uni9686.vari3
    +
    +- uni9755.vari2
    +
    +- uniFA11.vari2
    +
    +- uniFA24.vari2
    +
    +- union.alt
    +
    +- union.full
    +
    +- universal.full
    +
    +- uptack.full
    +
    +- watto
    +
    +- whiteCircle.alt
    +
    +- yaado
    +
    +- zero.paren
    +
    +

    [code: unreachable-glyphs]

    +
+

Check if each glyph has the recommended amount of contours.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/contour_count>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.

    +

    The following glyphs do not have the recommended number of contours:

    +
    - Glyph name: Q	Contours detected: 3	Expected: 2
    +
    +- Glyph name: softhyphen	Contours detected: 1	Expected: 0
    +
    +- Glyph name: oe	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni210A	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni2113	Contours detected: 1	Expected: 2
    +
    +- Glyph name: boxVerticalSingleAndRightDouble	Contours detected: 1	Expected: 2
    +
    +- Glyph name: boxVerticalSingleAndLeftDouble	Contours detected: 1	Expected: 2
    +
    +- Glyph name: Q	Contours detected: 3	Expected: 2
    +
    +- Glyph name: fi	Contours detected: 1	Expected: 3
    +
    +- Glyph name: fl	Contours detected: 1	Expected: 2
    +
    +- Glyph name: oe	Contours detected: 4	Expected: 3
    +
    +- Glyph name: uni210A	Contours detected: 3	Expected: 2
    +
    +- Glyph name: uni2113	Contours detected: 1	Expected: 2
    +
    +

    [code: contour-count]

    +
+

Does the font contain a soft hyphen?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/soft_hyphen>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    This font has a 'Soft Hyphen' character. [code: softhyphen]

    +
+

Does the font contain chws and vchw features?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/cjk_chws_feature>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    chws feature not found in font. Use chws_tool (https://github.com/googlefonts/chws_tool) to add it. [code: missing-chws-feature]

    +
  • ⚠️ WARN

    vchw feature not found in font. Use chws_tool (https://github.com/googlefonts/chws_tool) to add it. [code: missing-vchw-feature]

    +
+

Check math signs have the same width.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/math_signs_width>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    The most common width is 620 among a set of 2 math glyphs. +The following math glyphs have a different width, though:

    +

    Width = 687: +plus

    +

    Width = 640: +equal

    +

    Width = 649: +logicalnot

    +

    Width = 643: +plusminus

    +

    Width = 578: +multiply

    +

    Width = 678: +divide

    +

    Width = 565: +minus

    +

    Width = 1000: +postalmark +[code: width-outliers]

    +
+

Section: fontbakery.profiles.dsig

+⚠️ +

Does the font have a DSIG table?

+
Check ID: <FontBakeryCheck:com.google.fonts/check/dsig>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly. +The current recommendation is to completely remove the DSIG table. [code: found-DSIG]

    +
+

Section: fontbakery.profiles.gpos

+⚠️ +

Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value

+
Check ID: <FontBakeryCheck:com.google.fonts/check/gpos_kerning_info>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    GPOS table lacks kerning information. [code: lacks-kern-info]

    +
+

Section: Shaping Checks

+⚠️⏩⏩⏩⏩ +

Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.

+
Check ID: <FontBakeryCheck:com.google.fonts/check/soft_dotted>
+ +
⚠️ YujiSyuku-Regular.ttf
  • ⚠️ WARN

    The dot of soft dotted characters used in orthographies must disappear in the following strings: j́ j̈

    +

    The dot of soft dotted characters should disappear in other cases, for example: i̅ į̅ j̅ j̆ j̇ j̋ ǰ j̨́ j̨̅ j̨̆ j̨̇ j̨̈ j̨̋ ǰ̨

    +

    Your font does not cover the following languages that require the soft-dotted feature: Kom (Latn, 360,685 speakers), Koonzime (Latn, 40,000 speakers), Aghem (Latn, 38,843 speakers), Lugbara (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Avokaya (Latn, 100,000 speakers), Igbo (Latn, 27,823,640 speakers), Ejagham (Latn, 120,000 speakers), Ebira (Latn, 2,200,000 speakers), Ma’di (Latn, 584,000 speakers), Dan (Latn, 1,099,244 speakers), Nateni (Latn, 100,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Dutch (Latn, 31,709,104 speakers), Basaa (Latn, 332,940 speakers). [code: soft-dotted]

    +
+
+ + \ No newline at end of file diff --git a/docs/fontbakery-reports/yujisyuku-report.json b/docs/fontbakery-reports/yujisyuku-report.json new file mode 100644 index 00000000..fa545b89 --- /dev/null +++ b/docs/fontbakery-reports/yujisyuku-report.json @@ -0,0 +1,5698 @@ +{ + "result": { + "FAIL": 4, + "INFO": 8, + "PASS": 144, + "SKIP": 67, + "WARN": 18 + }, + "sections": [ + { + "checks": [ + { + "description": "Ensure that all variable font files have the same set of axes and axis ranges.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: VFs", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n In order to facilitate the construction of intuitive and friendly user\n interfaces, all variable font files in a given family should have the same set\n of variation axes. Also, each axis must have a consistent setting of min/max\n value ranges accross all the files.\n ", + "result": "SKIP" + }, + { + "description": "All tabular figures must have the same width across the RIBBI-family.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tabular figures need to have the same metrics in all styles in order to allow\n tables to be set with proper typographic control, but to maintain the placement\n of decimals and numeric columns between rows.\n\n Here's a good explanation of this:\n https://www.typography.com/techniques/fonts-for-financials/#tabular-figs\n ", + "result": "PASS" + }, + { + "description": "Does font file include unacceptable control character glyphs?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Unacceptable control characters were not identified.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Use of some unacceptable control characters in the U+0000 - U+001F range can\n lead to rendering issues on some platforms.\n\n Acceptable control characters are defined as .null (U+0000) and\n CR (U+000D) for this test.\n ", + "result": "PASS" + }, + { + "description": "Ensure Italic styles have Roman counterparts.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For each font family on Google Fonts, every Italic style must have\n a Roman sibling.\n\n This kind of problem was first observed at [1] where the Bold style was\n missing but BoldItalic was included.\n\n [1] https://github.com/google/fonts/pull/1482\n ", + "result": "PASS" + }, + { + "description": "Check axis ordering on the STAT table.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "This font does not have a STAT table: /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf [code: missing-STAT]", + "status": "SKIP", + "traceback": null + }, + { + "message": "From a total of 1 font files, 1 of them (100.00%) lack a STAT table.\n\n\tAnd these are the most common STAT axis orderings:\n\t [code: summary]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is (for now) a merely informative check to detect what's the axis ordering\n declared on the STAT table of fonts in the Google Fonts collection.\n\n We may later update this to enforce some unified axis ordering scheme,\n yet to be determined.\n ", + "result": "INFO" + }, + { + "description": "Check README.md has a sample image.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: readme_contents, readme_directory", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n In order to showcase what a font family looks like, the project's README.md\n file should ideally include a sample image and highlight it in the upper\n portion of the document, no more than 10 lines away from the top of the file.\n ", + "result": "SKIP" + }, + { + "description": "Checking file is named canonically.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font filename is correct, \"YujiSyuku-Regular.ttf\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A font's filename must be composed as \"-.ttf\":\n\n - Nunito-Regular.ttf\n\n - Oswald-BoldItalic.ttf\n\n\n Variable fonts must list the axis tags in alphabetical order in\n square brackets and separated by commas:\n\n - Roboto[wdth,wght].ttf\n\n - Familyname-Italic[wght].ttf\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All links in the DESCRIPTION file look good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website. For that reason, all hyperlinks\n in it must be properly working.\n ", + "result": "PASS" + }, + { + "description": "URLs on DESCRIPTION file must not display http(s) prefix.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The snippet of HTML in the DESCRIPTION.en_us.html file is added to the font\n family webpage on the Google Fonts website.\n\n Google Fonts has a content formatting policy for that snippet that expects the\n text content of links not to include the http:// or https:// prefixes.\n ", + "result": "PASS" + }, + { + "description": "Does DESCRIPTION file contain a upstream Git repo URL?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Found a git repo URL: https://github.com/Kinutafontfactory/Yuji [code: url-found]", + "status": "INFO", + "traceback": null + }, + { + "message": "Looks great!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The contents of the DESCRIPTION.en-us.html file are displayed on the\n Google Fonts website in the about section of each font family specimen page.\n\n Since all of the Google Fonts collection is composed of libre-licensed fonts,\n this check enforces a policy that there must be a hypertext link in that page\n directing users to the repository where the font project files are\n made available.\n\n Such hosting is typically done on sites like Github, Gitlab, GNU Savannah or\n any other git-based version control service.\n ", + "result": "INFO" + }, + { + "description": "Is this a proper HTML snippet?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/DESCRIPTION.en_us.html is a propper HTML file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people write malformed HTML markup. This check should ensure the\n file is good.\n\n Additionally, when packaging families for being pushed to the `google/fonts`\n git repo, if there is no DESCRIPTION.en_us.html file, some older versions of\n the `add_font.py` tool insert a placeholder description file which contains\n invalid html. This file needs to either be replaced with an existing\n description file or edited by hand.\n ", + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html must have more than 200 bytes.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "DESCRIPTION.en_us.html is larger than 200 bytes.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "DESCRIPTION.en_us.html should end in a linebreak.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": ":-)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some older text-handling tools sometimes misbehave if the last line of data\n in a text file is not terminated with a newline character (also known as '\\n').\n\n We know that this is a very small detail, but for the sake of keeping all\n DESCRIPTION.en_us.html files uniformly formatted throughout the GFonts\n collection, we chose to adopt the practice of placing this final linebreak\n character on them.\n ", + "result": "PASS" + }, + { + "description": "Check METADATA.pb parse correctly.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb parsed successfuly.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to ensure that the METADATA.pb file is not\n malformed.\n ", + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not be 'unknown'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font designer field is not 'unknown'.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font designer field in METADATA.pb must not contain 'Multiple designers'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n For a while the string \"Multiple designers\" was used as a placeholder on\n METADATA.pb files. We should replace all those instances with actual designer\n names so that proper credits are displayed on the Google Fonts family\n specimen pages.\n\n If there's more than a single designer, the designer names must be\n separated by commas.\n ", + "result": "PASS" + }, + { + "description": "Multiple values in font designer field in METADATA.pb must be separated by commas.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We must use commas instead of forward slashes because the server-side code\n at the fonts.google.com directory will segment the string on the commas into\n a list of names and display the first item in the list as the\n \"principal designer\" while the remaining names are identified as \"contributors\".\n\n See eg https://fonts.google.com/specimen/Rubik\n ", + "result": "PASS" + }, + { + "description": "Does METADATA.pb copyright field contain broken links?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All links in the METADATA.pb file look good!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb lists all font binaries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The set of font binaries available, except the ones on a \"static\" subdir,\n must match exactly those declared on the METADATA.pb file.\n\n Also, to avoid confusion, we expect that font files (other than statics)\n are not placed on subdirectories.\n ", + "result": "PASS" + }, + { + "description": "Ensure METADATA.pb category field is valid.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are only five acceptable values for the category field in a METADATA.pb\n file:\n\n - MONOSPACE\n\n - SANS_SERIF\n\n - SERIF\n\n - DISPLAY\n\n - HANDWRITING\n\n This check is meant to avoid typos in this field.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 fsType does not impose restrictions.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsType is properly set to zero.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The fsType in the OS/2 table is a legacy DRM-related field. Fonts in the\n Google Fonts collection must have it set to zero (also known as\n \"Installable Embedding\"). This setting indicates that the fonts can be\n embedded in documents and permanently installed by applications on\n remote systems.\n\n More detailed info is available at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/os2#fstype\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 VendorID 'KDW\u0000' looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Microsoft keeps a list of font vendors and their respective contact info. This\n list is updated regularly and is indexed by a 4-char \"Vendor ID\" which is\n stored in the achVendID field of the OS/2 table.\n\n Registering your ID is not mandatory, but it is a good practice since some\n applications may display the type designer / type foundry contact info on some\n dialog and also because that info will be visible on Microsoft's website:\n\n https://docs.microsoft.com/en-us/typography/vendors/\n\n This check verifies whether or not a given font's vendor ID is registered in\n that list or if it has some of the default values used by the most common\n font editors.\n\n Each new FontBakery release includes a cached copy of that list of vendor IDs.\n If you registered recently, you're safe to ignore warnings emitted by this\n check, since your ID will soon be included in one of our upcoming releases.\n ", + "result": "PASS" + }, + { + "description": "Check Google Fonts glyph coverage.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Missing required codepoints:\n\n\t- 0x0300 (COMBINING GRAVE ACCENT)\n\n\n\t- 0x0304 (COMBINING MACRON)\n\n\n\t- 0x02D9 (DOT ABOVE)\n\n\n\t- 0x0102 (LATIN CAPITAL LETTER A WITH BREVE)\n\n\n\t- 0x0100 (LATIN CAPITAL LETTER A WITH MACRON)\n\n\n\t- 0x0104 (LATIN CAPITAL LETTER A WITH OGONEK)\n\n\n\t- 0x0106 (LATIN CAPITAL LETTER C WITH ACUTE)\n\n\n\t- 0x010C (LATIN CAPITAL LETTER C WITH CARON)\n\n\n\t- 0x010A (LATIN CAPITAL LETTER C WITH DOT ABOVE)\n\n\n\t- 0x010E (LATIN CAPITAL LETTER D WITH CARON)\n\n\n\t- 0x0110 (LATIN CAPITAL LETTER D WITH STROKE)\n\n\n\t- 0x011A (LATIN CAPITAL LETTER E WITH CARON)\n\n\n\t- 0x0116 (LATIN CAPITAL LETTER E WITH DOT ABOVE)\n\n\n\t- 0x0112 (LATIN CAPITAL LETTER E WITH MACRON)\n\n\n\t- 0x0118 (LATIN CAPITAL LETTER E WITH OGONEK)\n\n\n\t- 0x011E (LATIN CAPITAL LETTER G WITH BREVE)\n\n\n\t- 0x0122 (LATIN CAPITAL LETTER G WITH CEDILLA)\n\n\n\t- 0x0120 (LATIN CAPITAL LETTER G WITH DOT ABOVE)\n\n\n\t- 0x0126 (LATIN CAPITAL LETTER H WITH STROKE)\n\n\n\t- 0x0130 (LATIN CAPITAL LETTER I WITH DOT ABOVE)\n\n\n\t- 0x012A (LATIN CAPITAL LETTER I WITH MACRON)\n\n\n\t- 0x012E (LATIN CAPITAL LETTER I WITH OGONEK)\n\n\n\t- 0x0136 (LATIN CAPITAL LETTER K WITH CEDILLA)\n\n\n\t- 0x0139 (LATIN CAPITAL LETTER L WITH ACUTE)\n\n\n\t- 0x013D (LATIN CAPITAL LETTER L WITH CARON)\n\n\n\t- 0x013B (LATIN CAPITAL LETTER L WITH CEDILLA)\n\n\n\t- 0x0143 (LATIN CAPITAL LETTER N WITH ACUTE)\n\n\n\t- 0x0147 (LATIN CAPITAL LETTER N WITH CARON)\n\n\n\t- 0x0145 (LATIN CAPITAL LETTER N WITH CEDILLA)\n\n\n\t- 0x014A (LATIN CAPITAL LETTER ENG)\n\n\n\t- 0x0150 (LATIN CAPITAL LETTER O WITH DOUBLE ACUTE)\n\n\n\t- 0x014C (LATIN CAPITAL LETTER O WITH MACRON)\n\n\n\t- 0x0154 (LATIN CAPITAL LETTER R WITH ACUTE)\n\n\n\t- 0x0158 (LATIN CAPITAL LETTER R WITH CARON)\n\n\n\t- 0x0156 (LATIN CAPITAL LETTER R WITH CEDILLA)\n\n\n\t- 0x015A (LATIN CAPITAL LETTER S WITH ACUTE)\n\n\n\t- 0x015E (LATIN CAPITAL LETTER S WITH CEDILLA)\n\n\n\t- 0x0218 (LATIN CAPITAL LETTER S WITH COMMA BELOW)\n\n\n\t- 0x1E9E (LATIN CAPITAL LETTER SHARP S)\n\n\n\t- 0x0164 (LATIN CAPITAL LETTER T WITH CARON)\n\n\n\t- 0x021A (LATIN CAPITAL LETTER T WITH COMMA BELOW)\n\n\n\t- 0x016C (LATIN CAPITAL LETTER U WITH BREVE)\n\n\n\t- 0x0170 (LATIN CAPITAL LETTER U WITH DOUBLE ACUTE)\n\n\n\t- 0x016A (LATIN CAPITAL LETTER U WITH MACRON)\n\n\n\t- 0x0172 (LATIN CAPITAL LETTER U WITH OGONEK)\n\n\n\t- 0x016E (LATIN CAPITAL LETTER U WITH RING ABOVE)\n\n\n\t- 0x1E82 (LATIN CAPITAL LETTER W WITH ACUTE)\n\n\n\t- 0x0174 (LATIN CAPITAL LETTER W WITH CIRCUMFLEX)\n\n\n\t- 0x1E84 (LATIN CAPITAL LETTER W WITH DIAERESIS)\n\n\n\t- 0x1E80 (LATIN CAPITAL LETTER W WITH GRAVE)\n\n\n\t- 0x0176 (LATIN CAPITAL LETTER Y WITH CIRCUMFLEX)\n\n\n\t- 0x1EF2 (LATIN CAPITAL LETTER Y WITH GRAVE)\n\n\n\t- 0x0179 (LATIN CAPITAL LETTER Z WITH ACUTE)\n\n\n\t- 0x017B (LATIN CAPITAL LETTER Z WITH DOT ABOVE)\n\n\n\t- 0x0103 (LATIN SMALL LETTER A WITH BREVE)\n\n\n\t- 0x0101 (LATIN SMALL LETTER A WITH MACRON)\n\n\n\t- 0x0105 (LATIN SMALL LETTER A WITH OGONEK)\n\n\n\t- 0x0107 (LATIN SMALL LETTER C WITH ACUTE)\n\n\n\t- 0x010D (LATIN SMALL LETTER C WITH CARON)\n\n\n\t- 0x010B (LATIN SMALL LETTER C WITH DOT ABOVE)\n\n\n\t- 0x010F (LATIN SMALL LETTER D WITH CARON)\n\n\n\t- 0x0111 (LATIN SMALL LETTER D WITH STROKE)\n\n\n\t- 0x011B (LATIN SMALL LETTER E WITH CARON)\n\n\n\t- 0x0117 (LATIN SMALL LETTER E WITH DOT ABOVE)\n\n\n\t- 0x0113 (LATIN SMALL LETTER E WITH MACRON)\n\n\n\t- 0x0119 (LATIN SMALL LETTER E WITH OGONEK)\n\n\n\t- 0x011F (LATIN SMALL LETTER G WITH BREVE)\n\n\n\t- 0x0123 (LATIN SMALL LETTER G WITH CEDILLA)\n\n\n\t- 0x0121 (LATIN SMALL LETTER G WITH DOT ABOVE)\n\n\n\t- 0x0127 (LATIN SMALL LETTER H WITH STROKE)\n\n\n\t- 0x012B (LATIN SMALL LETTER I WITH MACRON)\n\n\n\t- 0x012F (LATIN SMALL LETTER I WITH OGONEK)\n\n\n\t- 0x0237 (LATIN SMALL LETTER DOTLESS J)\n\n\n\t- 0x0137 (LATIN SMALL LETTER K WITH CEDILLA)\n\n\n\t- 0x013A (LATIN SMALL LETTER L WITH ACUTE)\n\n\n\t- 0x013E (LATIN SMALL LETTER L WITH CARON)\n\n\n\t- 0x013C (LATIN SMALL LETTER L WITH CEDILLA)\n\n\n\t- 0x0144 (LATIN SMALL LETTER N WITH ACUTE)\n\n\n\t- 0x0148 (LATIN SMALL LETTER N WITH CARON)\n\n\n\t- 0x0146 (LATIN SMALL LETTER N WITH CEDILLA)\n\n\n\t- 0x014B (LATIN SMALL LETTER ENG)\n\n\n\t- 0x0151 (LATIN SMALL LETTER O WITH DOUBLE ACUTE)\n\n\n\t- 0x014D (LATIN SMALL LETTER O WITH MACRON)\n\n\n\t- 0x0155 (LATIN SMALL LETTER R WITH ACUTE)\n\n\n\t- 0x0159 (LATIN SMALL LETTER R WITH CARON)\n\n\n\t- 0x0157 (LATIN SMALL LETTER R WITH CEDILLA)\n\n\n\t- 0x015B (LATIN SMALL LETTER S WITH ACUTE)\n\n\n\t- 0x015F (LATIN SMALL LETTER S WITH CEDILLA)\n\n\n\t- 0x0219 (LATIN SMALL LETTER S WITH COMMA BELOW)\n\n\n\t- 0x0165 (LATIN SMALL LETTER T WITH CARON)\n\n\n\t- 0x021B (LATIN SMALL LETTER T WITH COMMA BELOW)\n\n\n\t- 0x016D (LATIN SMALL LETTER U WITH BREVE)\n\n\n\t- 0x0171 (LATIN SMALL LETTER U WITH DOUBLE ACUTE)\n\n\n\t- 0x016B (LATIN SMALL LETTER U WITH MACRON)\n\n\n\t- 0x0173 (LATIN SMALL LETTER U WITH OGONEK)\n\n\n\t- 0x016F (LATIN SMALL LETTER U WITH RING ABOVE)\n\n\n\t- 0x1E83 (LATIN SMALL LETTER W WITH ACUTE)\n\n\n\t- 0x0175 (LATIN SMALL LETTER W WITH CIRCUMFLEX)\n\n\n\t- 0x1E85 (LATIN SMALL LETTER W WITH DIAERESIS)\n\n\n\t- 0x1E81 (LATIN SMALL LETTER W WITH GRAVE)\n\n\n\t- 0x0177 (LATIN SMALL LETTER Y WITH CIRCUMFLEX)\n\n\n\t- 0x1EF3 (LATIN SMALL LETTER Y WITH GRAVE)\n\n\n\t- 0x017A (LATIN SMALL LETTER Z WITH ACUTE)\n\n\n\t- 0x017C (LATIN SMALL LETTER Z WITH DOT ABOVE)\n\n\n\t- 0x0302 (COMBINING CIRCUMFLEX ACCENT)\n\n\n\t- 0x030A (COMBINING RING ABOVE)\n\n\n\t- 0x0303 (COMBINING TILDE)\n\n\n\t- 0x0312 (COMBINING TURNED COMMA ABOVE)\n\n\n\t- 0x0326 (COMBINING COMMA BELOW)\n\n\n\t- 0x0327 (COMBINING CEDILLA)\n\n\n\t- 0x02DD (DOUBLE ACUTE ACCENT)\n\n\n\t- 0x02C7 (CARON)\n\n\n\t- 0x02D8 (BREVE)\n\n\n\t- 0x02DB (OGONEK)\n [code: missing-codepoints]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects that fonts in its collection support at least the minimal\n set of characters defined in the `GF-latin-core` glyph-set.\n ", + "result": "FAIL" + }, + { + "description": "Check for METADATA subsets with zero support.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures that the subsets specified on a METADATA.pb file are\n actually supported (even if only partially) by the font files.\n\n Subsets for which none of the codepoints are supported will cause the\n check to FAIL.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check for codepoints not covered by METADATA subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The following codepoints supported by the font are not covered by\n any subsets defined in the font's metadata file, and will never\n be served. You can solve this by either manually adding additional\n subset declarations to METADATA.pb, or by editing the glyphset\n definitions.\n\n * U+0305 COMBINING OVERLINE: try adding one of: gothic, glagolitic, elbasan, coptic, math\n * U+0306 COMBINING BREVE: try adding one of: old-permic, tifinagh\n * U+0307 COMBINING DOT ABOVE: try adding one of: syriac, old-permic, tifinagh, coptic, math, tai-le, malayalam, canadian-aboriginal\n * U+030B COMBINING DOUBLE ACUTE ACCENT: try adding one of: cherokee, osage\n * U+030C COMBINING CARON: try adding one of: cherokee, tai-le\n * U+0328 COMBINING OGONEK: not included in any glyphset definition\n * U+0391 GREEK CAPITAL LETTER ALPHA: try adding one of: greek, elbasan, math\n * U+0392 GREEK CAPITAL LETTER BETA: try adding one of: greek, elbasan, math\n * U+0393 GREEK CAPITAL LETTER GAMMA: try adding one of: greek, elbasan, math\n * U+0394 GREEK CAPITAL LETTER DELTA: try adding one of: greek, elbasan, math\n * U+0395 GREEK CAPITAL LETTER EPSILON: try adding one of: greek, elbasan, math\n * U+0396 GREEK CAPITAL LETTER ZETA: try adding one of: greek, elbasan, math\n * U+0397 GREEK CAPITAL LETTER ETA: try adding one of: greek, elbasan, math\n * U+0398 GREEK CAPITAL LETTER THETA: try adding one of: greek, elbasan, math\n * U+0399 GREEK CAPITAL LETTER IOTA: try adding one of: greek, elbasan, math\n * U+039A GREEK CAPITAL LETTER KAPPA: try adding one of: greek, elbasan, math\n * U+039B GREEK CAPITAL LETTER LAMDA: try adding one of: greek, elbasan, math\n * U+039C GREEK CAPITAL LETTER MU: try adding one of: greek, elbasan, math\n * U+039D GREEK CAPITAL LETTER NU: try adding one of: greek, elbasan, math\n * U+039E GREEK CAPITAL LETTER XI: try adding one of: greek, elbasan, math\n * U+039F GREEK CAPITAL LETTER OMICRON: try adding one of: greek, elbasan, math\n * U+03A0 GREEK CAPITAL LETTER PI: try adding one of: greek, elbasan, math\n * U+03A1 GREEK CAPITAL LETTER RHO: try adding one of: greek, elbasan, math\n * U+03A3 GREEK CAPITAL LETTER SIGMA: try adding one of: greek, elbasan, math\n * U+03A4 GREEK CAPITAL LETTER TAU: try adding one of: greek, elbasan, math\n * U+03A5 GREEK CAPITAL LETTER UPSILON: try adding one of: greek, elbasan, math\n * U+03A6 GREEK CAPITAL LETTER PHI: try adding one of: greek, elbasan, math\n * U+03A7 GREEK CAPITAL LETTER CHI: try adding one of: greek, elbasan, math\n * U+03A8 GREEK CAPITAL LETTER PSI: try adding one of: greek, elbasan, math\n * U+03A9 GREEK CAPITAL LETTER OMEGA: try adding one of: greek, elbasan, math\n * U+03B1 GREEK SMALL LETTER ALPHA: try adding one of: greek, math\n * U+03B2 GREEK SMALL LETTER BETA: try adding one of: greek, math\n * U+03B3 GREEK SMALL LETTER GAMMA: try adding one of: greek, math\n * U+03B4 GREEK SMALL LETTER DELTA: try adding one of: greek, math\n * U+03B5 GREEK SMALL LETTER EPSILON: try adding one of: greek, math\n * U+03B6 GREEK SMALL LETTER ZETA: try adding one of: greek, math\n * U+03B7 GREEK SMALL LETTER ETA: try adding one of: greek, math\n * U+03B8 GREEK SMALL LETTER THETA: try adding one of: greek, math\n * U+03B9 GREEK SMALL LETTER IOTA: try adding one of: greek, math\n * U+03BA GREEK SMALL LETTER KAPPA: try adding one of: greek, math\n * U+03BB GREEK SMALL LETTER LAMDA: try adding one of: greek, math\n * U+03BC GREEK SMALL LETTER MU: try adding one of: greek, math\n * U+03BD GREEK SMALL LETTER NU: try adding one of: greek, math\n * U+03BE GREEK SMALL LETTER XI: try adding one of: greek, math\n * U+03BF GREEK SMALL LETTER OMICRON: try adding one of: greek, math\n * U+03C0 GREEK SMALL LETTER PI: try adding one of: yi, greek, math\n * U+03C1 GREEK SMALL LETTER RHO: try adding one of: greek, math\n * U+03C3 GREEK SMALL LETTER SIGMA: try adding one of: greek, math\n * U+03C4 GREEK SMALL LETTER TAU: try adding one of: greek, math\n * U+03C5 GREEK SMALL LETTER UPSILON: try adding one of: greek, math\n * U+03C6 GREEK SMALL LETTER PHI: try adding one of: greek, math\n * U+03C7 GREEK SMALL LETTER CHI: try adding one of: greek, math\n * U+03C8 GREEK SMALL LETTER PSI: try adding one of: greek, math\n * U+03C9 GREEK SMALL LETTER OMEGA: try adding one of: greek, math\n * U+2015 HORIZONTAL BAR: try adding adlam\n * U+2016 DOUBLE VERTICAL LINE: not included in any glyphset definition\n * U+2021 DOUBLE DAGGER: try adding adlam\n * U+2025 TWO DOT LEADER: try adding phags-pa\n * U+2030 PER MILLE SIGN: try adding adlam\n * U+203B REFERENCE MARK: not included in any glyphset definition\n * U+205A TWO DOT PUNCTUATION: try adding one of: old-turkic, old-hungarian\n * U+205D TRICOLON: try adding one of: meroitic, old-hungarian\n * U+2103 DEGREE CELSIUS: not included in any glyphset definition\n * U+2109 DEGREE FAHRENHEIT: not included in any glyphset definition\n * U+210A SCRIPT SMALL G: try adding math\n * U+2121 TELEPHONE SIGN: not included in any glyphset definition\n * U+212B ANGSTROM SIGN: not included in any glyphset definition\n * U+213B FACSIMILE SIGN: not included in any glyphset definition\n * U+2160 ROMAN NUMERAL ONE: try adding symbols\n * U+2161 ROMAN NUMERAL TWO: try adding symbols\n * U+2162 ROMAN NUMERAL THREE: try adding symbols\n * U+2163 ROMAN NUMERAL FOUR: try adding symbols\n * U+2164 ROMAN NUMERAL FIVE: try adding symbols\n * U+2165 ROMAN NUMERAL SIX: try adding symbols\n * U+2166 ROMAN NUMERAL SEVEN: try adding symbols\n * U+2167 ROMAN NUMERAL EIGHT: try adding symbols\n * U+2168 ROMAN NUMERAL NINE: try adding symbols\n * U+2169 ROMAN NUMERAL TEN: try adding symbols\n * U+216A ROMAN NUMERAL ELEVEN: try adding symbols\n * U+216B ROMAN NUMERAL TWELVE: try adding symbols\n * U+2170 SMALL ROMAN NUMERAL ONE: try adding symbols\n * U+2171 SMALL ROMAN NUMERAL TWO: try adding symbols\n * U+2172 SMALL ROMAN NUMERAL THREE: try adding symbols\n * U+2173 SMALL ROMAN NUMERAL FOUR: try adding symbols\n * U+2174 SMALL ROMAN NUMERAL FIVE: try adding symbols\n * U+2175 SMALL ROMAN NUMERAL SIX: try adding symbols\n * U+2176 SMALL ROMAN NUMERAL SEVEN: try adding symbols\n * U+2177 SMALL ROMAN NUMERAL EIGHT: try adding symbols\n * U+2178 SMALL ROMAN NUMERAL NINE: try adding symbols\n * U+2179 SMALL ROMAN NUMERAL TEN: try adding symbols\n * U+217A SMALL ROMAN NUMERAL ELEVEN: try adding symbols\n * U+217B SMALL ROMAN NUMERAL TWELVE: try adding symbols\n * U+217F SMALL ROMAN NUMERAL ONE THOUSAND: try adding symbols\n * U+2190 LEFTWARDS ARROW: try adding one of: symbols, math\n * U+2192 RIGHTWARDS ARROW: try adding one of: symbols, math\n * U+21C4 RIGHTWARDS ARROW OVER LEFTWARDS ARROW: try adding math\n * U+21C5 UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW: try adding math\n * U+21C6 LEFTWARDS ARROW OVER RIGHTWARDS ARROW: try adding math\n * U+21E6 LEFTWARDS WHITE ARROW: try adding symbols\n * U+21E7 UPWARDS WHITE ARROW: try adding symbols\n * U+21E8 RIGHTWARDS WHITE ARROW: try adding symbols\n * U+21E9 DOWNWARDS WHITE ARROW: try adding symbols\n * U+2312 ARC: try adding symbols\n * U+23A7 LEFT CURLY BRACKET UPPER HOOK: try adding math\n * U+23A8 LEFT CURLY BRACKET MIDDLE PIECE: try adding math\n * U+23A9 LEFT CURLY BRACKET LOWER HOOK: try adding math\n * U+23AB RIGHT CURLY BRACKET UPPER HOOK: try adding math\n * U+23AC RIGHT CURLY BRACKET MIDDLE PIECE: try adding math\n * U+23AD RIGHT CURLY BRACKET LOWER HOOK: try adding math\n * U+2460 CIRCLED DIGIT ONE: try adding one of: mongolian, yi, symbols\n * U+2461 CIRCLED DIGIT TWO: try adding one of: mongolian, yi, symbols\n * U+2462 CIRCLED DIGIT THREE: try adding one of: mongolian, yi, symbols\n * U+2463 CIRCLED DIGIT FOUR: try adding one of: mongolian, yi, symbols\n * U+2464 CIRCLED DIGIT FIVE: try adding one of: mongolian, yi, symbols\n * U+2465 CIRCLED DIGIT SIX: try adding one of: mongolian, yi, symbols\n * U+2466 CIRCLED DIGIT SEVEN: try adding one of: mongolian, yi, symbols\n * U+2467 CIRCLED DIGIT EIGHT: try adding one of: mongolian, yi, symbols\n * U+2468 CIRCLED DIGIT NINE: try adding one of: mongolian, yi, symbols\n * U+2469 CIRCLED NUMBER TEN: try adding one of: mongolian, yi, symbols\n * U+246A CIRCLED NUMBER ELEVEN: try adding one of: mongolian, yi, symbols\n * U+246B CIRCLED NUMBER TWELVE: try adding one of: mongolian, yi, symbols\n * U+246C CIRCLED NUMBER THIRTEEN: try adding one of: mongolian, yi, symbols\n * U+246D CIRCLED NUMBER FOURTEEN: try adding one of: mongolian, yi, symbols\n * U+246E CIRCLED NUMBER FIFTEEN: try adding one of: mongolian, yi, symbols\n * U+246F CIRCLED NUMBER SIXTEEN: try adding one of: mongolian, yi, symbols\n * U+2470 CIRCLED NUMBER SEVENTEEN: try adding one of: mongolian, yi, symbols\n * U+2471 CIRCLED NUMBER EIGHTEEN: try adding one of: mongolian, yi, symbols\n * U+2472 CIRCLED NUMBER NINETEEN: try adding one of: mongolian, yi, symbols\n * U+2473 CIRCLED NUMBER TWENTY: try adding one of: mongolian, yi, symbols\n * U+2474 PARENTHESIZED DIGIT ONE: try adding one of: symbols, math\n * U+2475 PARENTHESIZED DIGIT TWO: try adding one of: symbols, math\n * U+2476 PARENTHESIZED DIGIT THREE: try adding symbols\n * U+2477 PARENTHESIZED DIGIT FOUR: try adding symbols\n * U+2478 PARENTHESIZED DIGIT FIVE: try adding symbols\n * U+2479 PARENTHESIZED DIGIT SIX: try adding symbols\n * U+247A PARENTHESIZED DIGIT SEVEN: try adding symbols\n * U+247B PARENTHESIZED DIGIT EIGHT: try adding symbols\n * U+247C PARENTHESIZED DIGIT NINE: try adding symbols\n * U+247D PARENTHESIZED NUMBER TEN: try adding symbols\n * U+247E PARENTHESIZED NUMBER ELEVEN: try adding symbols\n * U+247F PARENTHESIZED NUMBER TWELVE: try adding symbols\n * U+2480 PARENTHESIZED NUMBER THIRTEEN: try adding symbols\n * U+2481 PARENTHESIZED NUMBER FOURTEEN: try adding symbols\n * U+2482 PARENTHESIZED NUMBER FIFTEEN: try adding symbols\n * U+2483 PARENTHESIZED NUMBER SIXTEEN: try adding symbols\n * U+2484 PARENTHESIZED NUMBER SEVENTEEN: try adding symbols\n * U+2485 PARENTHESIZED NUMBER EIGHTEEN: try adding symbols\n * U+2486 PARENTHESIZED NUMBER NINETEEN: try adding symbols\n * U+2487 PARENTHESIZED NUMBER TWENTY: try adding symbols\n * U+2488 DIGIT ONE FULL STOP: try adding symbols\n * U+2489 DIGIT TWO FULL STOP: try adding symbols\n * U+248A DIGIT THREE FULL STOP: try adding symbols\n * U+248B DIGIT FOUR FULL STOP: try adding symbols\n * U+248C DIGIT FIVE FULL STOP: try adding symbols\n * U+248D DIGIT SIX FULL STOP: try adding symbols\n * U+248E DIGIT SEVEN FULL STOP: try adding symbols\n * U+248F DIGIT EIGHT FULL STOP: try adding symbols\n * U+2490 DIGIT NINE FULL STOP: try adding symbols\n * U+249C PARENTHESIZED LATIN SMALL LETTER A: try adding symbols\n * U+249D PARENTHESIZED LATIN SMALL LETTER B: try adding symbols\n * U+249E PARENTHESIZED LATIN SMALL LETTER C: try adding symbols\n * U+249F PARENTHESIZED LATIN SMALL LETTER D: try adding symbols\n * U+24A0 PARENTHESIZED LATIN SMALL LETTER E: try adding symbols\n * U+24A1 PARENTHESIZED LATIN SMALL LETTER F: try adding symbols\n * U+24A2 PARENTHESIZED LATIN SMALL LETTER G: try adding symbols\n * U+24A3 PARENTHESIZED LATIN SMALL LETTER H: try adding symbols\n * U+24A4 PARENTHESIZED LATIN SMALL LETTER I: try adding symbols\n * U+24A5 PARENTHESIZED LATIN SMALL LETTER J: try adding symbols\n * U+24A6 PARENTHESIZED LATIN SMALL LETTER K: try adding symbols\n * U+24A7 PARENTHESIZED LATIN SMALL LETTER L: try adding symbols\n * U+24A8 PARENTHESIZED LATIN SMALL LETTER M: try adding symbols\n * U+24A9 PARENTHESIZED LATIN SMALL LETTER N: try adding symbols\n * U+24AA PARENTHESIZED LATIN SMALL LETTER O: try adding symbols\n * U+24AB PARENTHESIZED LATIN SMALL LETTER P: try adding symbols\n * U+24AC PARENTHESIZED LATIN SMALL LETTER Q: try adding symbols\n * U+24AD PARENTHESIZED LATIN SMALL LETTER R: try adding symbols\n * U+24AE PARENTHESIZED LATIN SMALL LETTER S: try adding symbols\n * U+24AF PARENTHESIZED LATIN SMALL LETTER T: try adding symbols\n * U+24B0 PARENTHESIZED LATIN SMALL LETTER U: try adding symbols\n * U+24B1 PARENTHESIZED LATIN SMALL LETTER V: try adding symbols\n * U+24B2 PARENTHESIZED LATIN SMALL LETTER W: try adding symbols\n * U+24B3 PARENTHESIZED LATIN SMALL LETTER X: try adding symbols\n * U+24B4 PARENTHESIZED LATIN SMALL LETTER Y: try adding symbols\n * U+24B5 PARENTHESIZED LATIN SMALL LETTER Z: try adding symbols\n * U+24EA CIRCLED DIGIT ZERO: try adding symbols\n * U+2500 BOX DRAWINGS LIGHT HORIZONTAL: not included in any glyphset definition\n * U+2501 BOX DRAWINGS HEAVY HORIZONTAL: not included in any glyphset definition\n * U+2502 BOX DRAWINGS LIGHT VERTICAL: not included in any glyphset definition\n * U+2503 BOX DRAWINGS HEAVY VERTICAL: not included in any glyphset definition\n * U+2504 BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL: not included in any glyphset definition\n * U+2505 BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL: not included in any glyphset definition\n * U+2506 BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL: not included in any glyphset definition\n * U+2507 BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL: not included in any glyphset definition\n * U+2508 BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL: not included in any glyphset definition\n * U+2509 BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL: not included in any glyphset definition\n * U+250A BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL: not included in any glyphset definition\n * U+250B BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL: not included in any glyphset definition\n * U+250C BOX DRAWINGS LIGHT DOWN AND RIGHT: not included in any glyphset definition\n * U+250D BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY: not included in any glyphset definition\n * U+250E BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT: not included in any glyphset definition\n * U+250F BOX DRAWINGS HEAVY DOWN AND RIGHT: not included in any glyphset definition\n * U+2510 BOX DRAWINGS LIGHT DOWN AND LEFT: not included in any glyphset definition\n * U+2511 BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY: not included in any glyphset definition\n * U+2512 BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT: not included in any glyphset definition\n * U+2513 BOX DRAWINGS HEAVY DOWN AND LEFT: not included in any glyphset definition\n * U+2514 BOX DRAWINGS LIGHT UP AND RIGHT: not included in any glyphset definition\n * U+2515 BOX DRAWINGS UP LIGHT AND RIGHT HEAVY: not included in any glyphset definition\n * U+2516 BOX DRAWINGS UP HEAVY AND RIGHT LIGHT: not included in any glyphset definition\n * U+2517 BOX DRAWINGS HEAVY UP AND RIGHT: not included in any glyphset definition\n * U+2518 BOX DRAWINGS LIGHT UP AND LEFT: not included in any glyphset definition\n * U+2519 BOX DRAWINGS UP LIGHT AND LEFT HEAVY: not included in any glyphset definition\n * U+251A BOX DRAWINGS UP HEAVY AND LEFT LIGHT: not included in any glyphset definition\n * U+251B BOX DRAWINGS HEAVY UP AND LEFT: not included in any glyphset definition\n * U+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT: not included in any glyphset definition\n * U+251D BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY: not included in any glyphset definition\n * U+251E BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT: not included in any glyphset definition\n * U+251F BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT: not included in any glyphset definition\n * U+2520 BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT: not included in any glyphset definition\n * U+2521 BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY: not included in any glyphset definition\n * U+2522 BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY: not included in any glyphset definition\n * U+2523 BOX DRAWINGS HEAVY VERTICAL AND RIGHT: not included in any glyphset definition\n * U+2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT: not included in any glyphset definition\n * U+2525 BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY: not included in any glyphset definition\n * U+2526 BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT: not included in any glyphset definition\n * U+2527 BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT: not included in any glyphset definition\n * U+2528 BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT: not included in any glyphset definition\n * U+2529 BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY: not included in any glyphset definition\n * U+252A BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY: not included in any glyphset definition\n * U+252B BOX DRAWINGS HEAVY VERTICAL AND LEFT: not included in any glyphset definition\n * U+252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL: not included in any glyphset definition\n * U+252D BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT: not included in any glyphset definition\n * U+252E BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT: not included in any glyphset definition\n * U+252F BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY: not included in any glyphset definition\n * U+2530 BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT: not included in any glyphset definition\n * U+2531 BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY: not included in any glyphset definition\n * U+2532 BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY: not included in any glyphset definition\n * U+2533 BOX DRAWINGS HEAVY DOWN AND HORIZONTAL: not included in any glyphset definition\n * U+2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL: not included in any glyphset definition\n * U+2535 BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT: not included in any glyphset definition\n * U+2536 BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT: not included in any glyphset definition\n * U+2537 BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY: not included in any glyphset definition\n * U+2538 BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT: not included in any glyphset definition\n * U+2539 BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY: not included in any glyphset definition\n * U+253A BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY: not included in any glyphset definition\n * U+253B BOX DRAWINGS HEAVY UP AND HORIZONTAL: not included in any glyphset definition\n * U+253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL: not included in any glyphset definition\n * U+253D BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT: not included in any glyphset definition\n * U+253E BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT: not included in any glyphset definition\n * U+253F BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY: not included in any glyphset definition\n * U+2540 BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT: not included in any glyphset definition\n * U+2541 BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT: not included in any glyphset definition\n * U+2542 BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT: not included in any glyphset definition\n * U+2543 BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT: not included in any glyphset definition\n * U+2544 BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT: not included in any glyphset definition\n * U+2545 BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT: not included in any glyphset definition\n * U+2546 BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT: not included in any glyphset definition\n * U+2547 BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY: not included in any glyphset definition\n * U+2548 BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY: not included in any glyphset definition\n * U+2549 BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY: not included in any glyphset definition\n * U+254A BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY: not included in any glyphset definition\n * U+254B BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL: not included in any glyphset definition\n * U+2550 BOX DRAWINGS DOUBLE HORIZONTAL: not included in any glyphset definition\n * U+255E BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE: not included in any glyphset definition\n * U+2561 BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE: not included in any glyphset definition\n * U+256A BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE: not included in any glyphset definition\n * U+256D BOX DRAWINGS LIGHT ARC DOWN AND RIGHT: not included in any glyphset definition\n * U+256E BOX DRAWINGS LIGHT ARC DOWN AND LEFT: not included in any glyphset definition\n * U+256F BOX DRAWINGS LIGHT ARC UP AND LEFT: not included in any glyphset definition\n * U+2570 BOX DRAWINGS LIGHT ARC UP AND RIGHT: not included in any glyphset definition\n * U+2571 BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT: not included in any glyphset definition\n * U+2572 BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT: not included in any glyphset definition\n * U+2573 BOX DRAWINGS LIGHT DIAGONAL CROSS: not included in any glyphset definition\n * U+2581 LOWER ONE EIGHTH BLOCK: not included in any glyphset definition\n * U+2582 LOWER ONE QUARTER BLOCK: not included in any glyphset definition\n * U+2583 LOWER THREE EIGHTHS BLOCK: not included in any glyphset definition\n * U+2584 LOWER HALF BLOCK: not included in any glyphset definition\n * U+2585 LOWER FIVE EIGHTHS BLOCK: not included in any glyphset definition\n * U+2586 LOWER THREE QUARTERS BLOCK: not included in any glyphset definition\n * U+2587 LOWER SEVEN EIGHTHS BLOCK: not included in any glyphset definition\n * U+2588 FULL BLOCK: not included in any glyphset definition\n * U+2589 LEFT SEVEN EIGHTHS BLOCK: not included in any glyphset definition\n * U+258A LEFT THREE QUARTERS BLOCK: not included in any glyphset definition\n * U+258B LEFT FIVE EIGHTHS BLOCK: not included in any glyphset definition\n * U+258C LEFT HALF BLOCK: not included in any glyphset definition\n * U+258D LEFT THREE EIGHTHS BLOCK: not included in any glyphset definition\n * U+258E LEFT ONE QUARTER BLOCK: not included in any glyphset definition\n * U+258F LEFT ONE EIGHTH BLOCK: not included in any glyphset definition\n * U+2594 UPPER ONE EIGHTH BLOCK: not included in any glyphset definition\n * U+2595 RIGHT ONE EIGHTH BLOCK: not included in any glyphset definition\n * U+25A0 BLACK SQUARE: try adding symbols\n * U+25A1 WHITE SQUARE: try adding symbols\n * U+25A2 WHITE SQUARE WITH ROUNDED CORNERS: try adding symbols\n * U+25B2 BLACK UP-POINTING TRIANGLE: try adding symbols\n * U+25B3 WHITE UP-POINTING TRIANGLE: try adding one of: symbols, math\n * U+25B7 WHITE RIGHT-POINTING TRIANGLE: try adding one of: symbols, math\n * U+25BC BLACK DOWN-POINTING TRIANGLE: try adding symbols\n * U+25BD WHITE DOWN-POINTING TRIANGLE: try adding one of: symbols, math\n * U+25C1 WHITE LEFT-POINTING TRIANGLE: try adding one of: symbols, math\n * U+25C6 BLACK DIAMOND: try adding symbols\n * U+25C7 WHITE DIAMOND: try adding symbols\n * U+25C9 FISHEYE: try adding symbols\n * U+25CB WHITE CIRCLE: try adding symbols\n * U+25CE BULLSEYE: try adding symbols\n * U+25CF BLACK CIRCLE: try adding symbols\n * U+25E2 BLACK LOWER RIGHT TRIANGLE: try adding symbols\n * U+25E3 BLACK LOWER LEFT TRIANGLE: try adding symbols\n * U+25E4 BLACK UPPER LEFT TRIANGLE: try adding symbols\n * U+25E5 BLACK UPPER RIGHT TRIANGLE: try adding symbols\n * U+25EF LARGE CIRCLE: try adding symbols\n * U+2600 BLACK SUN WITH RAYS: try adding symbols\n * U+2601 CLOUD: try adding symbols\n * U+2602 UMBRELLA: try adding symbols\n * U+2603 SNOWMAN: try adding symbols\n * U+2605 BLACK STAR: try adding symbols\n * U+2606 WHITE STAR: try adding symbols\n * U+260E BLACK TELEPHONE: try adding symbols\n * U+261C WHITE LEFT POINTING INDEX: try adding symbols\n * U+261D WHITE UP POINTING INDEX: try adding symbols\n * U+261E WHITE RIGHT POINTING INDEX: try adding symbols\n * U+261F WHITE DOWN POINTING INDEX: try adding symbols\n * U+2640 FEMALE SIGN: try adding symbols\n * U+2642 MALE SIGN: try adding symbols\n * U+2660 BLACK SPADE SUIT: try adding symbols\n * U+2661 WHITE HEART SUIT: try adding symbols\n * U+2662 WHITE DIAMOND SUIT: try adding symbols\n * U+2663 BLACK CLUB SUIT: try adding symbols\n * U+2664 WHITE SPADE SUIT: try adding symbols\n * U+2665 BLACK HEART SUIT: try adding symbols\n * U+2666 BLACK DIAMOND SUIT: try adding symbols\n * U+2667 WHITE CLUB SUIT: try adding symbols\n * U+266A EIGHTH NOTE: try adding one of: music, symbols\n * U+266D MUSIC FLAT SIGN: try adding one of: music, symbols, math\n * U+266F MUSIC SHARP SIGN: try adding one of: music, symbols, math\n * U+2776 DINGBAT NEGATIVE CIRCLED DIGIT ONE: try adding symbols\n * U+2777 DINGBAT NEGATIVE CIRCLED DIGIT TWO: try adding symbols\n * U+2778 DINGBAT NEGATIVE CIRCLED DIGIT THREE: try adding symbols\n * U+2779 DINGBAT NEGATIVE CIRCLED DIGIT FOUR: try adding symbols\n * U+277A DINGBAT NEGATIVE CIRCLED DIGIT FIVE: try adding symbols\n * U+277B DINGBAT NEGATIVE CIRCLED DIGIT SIX: try adding symbols\n * U+277C DINGBAT NEGATIVE CIRCLED DIGIT SEVEN: try adding symbols\n * U+277D DINGBAT NEGATIVE CIRCLED DIGIT EIGHT: try adding symbols\n * U+277E DINGBAT NEGATIVE CIRCLED DIGIT NINE: try adding symbols\n * U+27A1 BLACK RIGHTWARDS ARROW: try adding symbols\n * U+2B05 LEFTWARDS BLACK ARROW: try adding symbols\n * U+2B06 UPWARDS BLACK ARROW: try adding symbols\n * U+2B07 DOWNWARDS BLACK ARROW: try adding symbols\n * U+3004 JAPANESE INDUSTRIAL STANDARD SYMBOL: not included in any glyphset definition\n * U+301D REVERSED DOUBLE PRIME QUOTATION MARK: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+301F LOW DOUBLE PRIME QUOTATION MARK: not included in any glyphset definition\n * U+3020 POSTAL MARK FACE: not included in any glyphset definition\n * U+3036 CIRCLED POSTAL MARK: not included in any glyphset definition\n * U+3094 HIRAGANA LETTER VU: not included in any glyphset definition\n * U+3095 HIRAGANA LETTER SMALL KA: not included in any glyphset definition\n * U+3096 HIRAGANA LETTER SMALL KE: not included in any glyphset definition\n * U+30F7 KATAKANA LETTER VA: not included in any glyphset definition\n * U+30F8 KATAKANA LETTER VI: not included in any glyphset definition\n * U+30F9 KATAKANA LETTER VE: not included in any glyphset definition\n * U+30FA KATAKANA LETTER VO: not included in any glyphset definition\n * U+322A PARENTHESIZED IDEOGRAPH MOON: not included in any glyphset definition\n * U+322B PARENTHESIZED IDEOGRAPH FIRE: not included in any glyphset definition\n * U+322C PARENTHESIZED IDEOGRAPH WATER: not included in any glyphset definition\n * U+322D PARENTHESIZED IDEOGRAPH WOOD: not included in any glyphset definition\n * U+322E PARENTHESIZED IDEOGRAPH METAL: not included in any glyphset definition\n * U+322F PARENTHESIZED IDEOGRAPH EARTH: not included in any glyphset definition\n * U+3230 PARENTHESIZED IDEOGRAPH SUN: not included in any glyphset definition\n * U+3231 PARENTHESIZED IDEOGRAPH STOCK: not included in any glyphset definition\n * U+3232 PARENTHESIZED IDEOGRAPH HAVE: not included in any glyphset definition\n * U+3233 PARENTHESIZED IDEOGRAPH SOCIETY: not included in any glyphset definition\n * U+3234 PARENTHESIZED IDEOGRAPH NAME: not included in any glyphset definition\n * U+3235 PARENTHESIZED IDEOGRAPH SPECIAL: not included in any glyphset definition\n * U+3236 PARENTHESIZED IDEOGRAPH FINANCIAL: not included in any glyphset definition\n * U+3237 PARENTHESIZED IDEOGRAPH CONGRATULATION: not included in any glyphset definition\n * U+3238 PARENTHESIZED IDEOGRAPH LABOR: not included in any glyphset definition\n * U+3239 PARENTHESIZED IDEOGRAPH REPRESENT: not included in any glyphset definition\n * U+323A PARENTHESIZED IDEOGRAPH CALL: not included in any glyphset definition\n * U+323B PARENTHESIZED IDEOGRAPH STUDY: not included in any glyphset definition\n * U+323C PARENTHESIZED IDEOGRAPH SUPERVISE: not included in any glyphset definition\n * U+323D PARENTHESIZED IDEOGRAPH ENTERPRISE: not included in any glyphset definition\n * U+323E PARENTHESIZED IDEOGRAPH RESOURCE: not included in any glyphset definition\n * U+323F PARENTHESIZED IDEOGRAPH ALLIANCE: not included in any glyphset definition\n * U+3240 PARENTHESIZED IDEOGRAPH FESTIVAL: not included in any glyphset definition\n * U+3241 PARENTHESIZED IDEOGRAPH REST: not included in any glyphset definition\n * U+3242 PARENTHESIZED IDEOGRAPH SELF: not included in any glyphset definition\n * U+3243 PARENTHESIZED IDEOGRAPH REACH: not included in any glyphset definition\n * U+3251 CIRCLED NUMBER TWENTY ONE: not included in any glyphset definition\n * U+3252 CIRCLED NUMBER TWENTY TWO: not included in any glyphset definition\n * U+3253 CIRCLED NUMBER TWENTY THREE: not included in any glyphset definition\n * U+3254 CIRCLED NUMBER TWENTY FOUR: not included in any glyphset definition\n * U+3255 CIRCLED NUMBER TWENTY FIVE: not included in any glyphset definition\n * U+3256 CIRCLED NUMBER TWENTY SIX: not included in any glyphset definition\n * U+3257 CIRCLED NUMBER TWENTY SEVEN: not included in any glyphset definition\n * U+3258 CIRCLED NUMBER TWENTY EIGHT: not included in any glyphset definition\n * U+3259 CIRCLED NUMBER TWENTY NINE: not included in any glyphset definition\n * U+325A CIRCLED NUMBER THIRTY: not included in any glyphset definition\n * U+325B CIRCLED NUMBER THIRTY ONE: not included in any glyphset definition\n * U+3291 CIRCLED IDEOGRAPH STOCK: not included in any glyphset definition\n * U+3292 CIRCLED IDEOGRAPH HAVE: not included in any glyphset definition\n * U+3293 CIRCLED IDEOGRAPH SOCIETY: not included in any glyphset definition\n * U+3294 CIRCLED IDEOGRAPH NAME: not included in any glyphset definition\n * U+3296 CIRCLED IDEOGRAPH FINANCIAL: not included in any glyphset definition\n * U+3298 CIRCLED IDEOGRAPH LABOR: not included in any glyphset definition\n * U+3299 CIRCLED IDEOGRAPH SECRET: not included in any glyphset definition\n * U+329D CIRCLED IDEOGRAPH EXCELLENT: not included in any glyphset definition\n * U+329E CIRCLED IDEOGRAPH PRINT: not included in any glyphset definition\n * U+32A4 CIRCLED IDEOGRAPH HIGH: not included in any glyphset definition\n * U+32A5 CIRCLED IDEOGRAPH CENTRE: not included in any glyphset definition\n * U+32A6 CIRCLED IDEOGRAPH LOW: not included in any glyphset definition\n * U+32A7 CIRCLED IDEOGRAPH LEFT: not included in any glyphset definition\n * U+32A8 CIRCLED IDEOGRAPH RIGHT: not included in any glyphset definition\n * U+32A9 CIRCLED IDEOGRAPH MEDICINE: not included in any glyphset definition\n * U+32AA CIRCLED IDEOGRAPH RELIGION: not included in any glyphset definition\n * U+32AB CIRCLED IDEOGRAPH STUDY: not included in any glyphset definition\n * U+32AC CIRCLED IDEOGRAPH SUPERVISE: not included in any glyphset definition\n * U+32AD CIRCLED IDEOGRAPH ENTERPRISE: not included in any glyphset definition\n * U+32AE CIRCLED IDEOGRAPH RESOURCE: not included in any glyphset definition\n * U+32AF CIRCLED IDEOGRAPH ALLIANCE: not included in any glyphset definition\n * U+32B0 CIRCLED IDEOGRAPH NIGHT: not included in any glyphset definition\n * U+3300 SQUARE APAATO: not included in any glyphset definition\n * U+3303 SQUARE AARU: not included in any glyphset definition\n * U+3305 SQUARE INTI: not included in any glyphset definition\n * U+330D SQUARE KARORII: not included in any glyphset definition\n * U+3314 SQUARE KIRO: not included in any glyphset definition\n * U+3315 SQUARE KIROGURAMU: not included in any glyphset definition\n * U+3316 SQUARE KIROMEETORU: not included in any glyphset definition\n * U+3318 SQUARE GURAMU: not included in any glyphset definition\n * U+331E SQUARE KOOPO: not included in any glyphset definition\n * U+3322 SQUARE SENTI: not included in any glyphset definition\n * U+3323 SQUARE SENTO: not included in any glyphset definition\n * U+3326 SQUARE DORU: not included in any glyphset definition\n * U+3327 SQUARE TON: not included in any glyphset definition\n * U+332A SQUARE HAITU: not included in any glyphset definition\n * U+332B SQUARE PAASENTO: not included in any glyphset definition\n * U+3331 SQUARE BIRU: not included in any glyphset definition\n * U+3333 SQUARE HUIITO: not included in any glyphset definition\n * U+3336 SQUARE HEKUTAARU: not included in any glyphset definition\n * U+3339 SQUARE HERUTU: not included in any glyphset definition\n * U+333B SQUARE PEEZI: not included in any glyphset definition\n * U+3342 SQUARE HOON: not included in any glyphset definition\n * U+3347 SQUARE MANSYON: not included in any glyphset definition\n * U+3349 SQUARE MIRI: not included in any glyphset definition\n * U+334A SQUARE MIRIBAARU: not included in any glyphset definition\n * U+334D SQUARE MEETORU: not included in any glyphset definition\n * U+334E SQUARE YAADO: not included in any glyphset definition\n * U+3351 SQUARE RITTORU: not included in any glyphset definition\n * U+3357 SQUARE WATTO: not included in any glyphset definition\n * U+337B SQUARE ERA NAME HEISEI: not included in any glyphset definition\n * U+337C SQUARE ERA NAME SYOUWA: not included in any glyphset definition\n * U+337D SQUARE ERA NAME TAISYOU: not included in any glyphset definition\n * U+337E SQUARE ERA NAME MEIZI: not included in any glyphset definition\n * U+337F SQUARE CORPORATION: not included in any glyphset definition\n * U+3385 SQUARE KB: not included in any glyphset definition\n * U+3386 SQUARE MB: not included in any glyphset definition\n * U+3387 SQUARE GB: not included in any glyphset definition\n * U+3388 SQUARE CAL: not included in any glyphset definition\n * U+3389 SQUARE KCAL: not included in any glyphset definition\n * U+338E SQUARE MG: not included in any glyphset definition\n * U+338F SQUARE KG: not included in any glyphset definition\n * U+3390 SQUARE HZ: not included in any glyphset definition\n * U+3396 SQUARE ML: not included in any glyphset definition\n * U+3397 SQUARE DL: not included in any glyphset definition\n * U+3398 SQUARE KL: not included in any glyphset definition\n * U+339C SQUARE MM: try adding chinese-simplified\n * U+339D SQUARE CM: try adding chinese-simplified\n * U+339E SQUARE KM: not included in any glyphset definition\n * U+339F SQUARE MM SQUARED: not included in any glyphset definition\n * U+33A0 SQUARE CM SQUARED: not included in any glyphset definition\n * U+33A1 SQUARE M SQUARED: try adding chinese-simplified\n * U+33A2 SQUARE KM SQUARED: not included in any glyphset definition\n * U+33A3 SQUARE MM CUBED: not included in any glyphset definition\n * U+33A4 SQUARE CM CUBED: not included in any glyphset definition\n * U+33A5 SQUARE M CUBED: not included in any glyphset definition\n * U+33A6 SQUARE KM CUBED: not included in any glyphset definition\n * U+33B0 SQUARE PS: not included in any glyphset definition\n * U+33B1 SQUARE NS: not included in any glyphset definition\n * U+33B2 SQUARE MU S: not included in any glyphset definition\n * U+33B3 SQUARE MS: not included in any glyphset definition\n * U+33C4 SQUARE CC: not included in any glyphset definition\n * U+33C8 SQUARE DB: not included in any glyphset definition\n * U+33CB SQUARE HP: not included in any glyphset definition\n * U+33CC SQUARE IN: not included in any glyphset definition\n * U+33CD SQUARE KK: not included in any glyphset definition\n * U+33D4 SQUARE MB SMALL: not included in any glyphset definition\n * U+3D4E CJK UNIFIED IDEOGRAPH-3D4E: not included in any glyphset definition\n * U+4E28 CJK UNIFIED IDEOGRAPH-4E28: try adding chinese-simplified\n * U+4EE1 CJK UNIFIED IDEOGRAPH-4EE1: try adding chinese-simplified\n * U+4EFC CJK UNIFIED IDEOGRAPH-4EFC: not included in any glyphset definition\n * U+4F00 CJK UNIFIED IDEOGRAPH-4F00: not included in any glyphset definition\n * U+4F03 CJK UNIFIED IDEOGRAPH-4F03: not included in any glyphset definition\n * U+4F39 CJK UNIFIED IDEOGRAPH-4F39: not included in any glyphset definition\n * U+4F56 CJK UNIFIED IDEOGRAPH-4F56: not included in any glyphset definition\n * U+4F8A CJK UNIFIED IDEOGRAPH-4F8A: not included in any glyphset definition\n * U+4F92 CJK UNIFIED IDEOGRAPH-4F92: not included in any glyphset definition\n * U+4F94 CJK UNIFIED IDEOGRAPH-4F94: not included in any glyphset definition\n * U+4F9A CJK UNIFIED IDEOGRAPH-4F9A: not included in any glyphset definition\n * U+4FC9 CJK UNIFIED IDEOGRAPH-4FC9: not included in any glyphset definition\n * U+4FCD CJK UNIFIED IDEOGRAPH-4FCD: try adding one of: chinese-traditional, chinese-hongkong\n * U+4FE0 CJK UNIFIED IDEOGRAPH-4FE0: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+4FF1 CJK UNIFIED IDEOGRAPH-4FF1: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+4FFF CJK UNIFIED IDEOGRAPH-4FFF: not included in any glyphset definition\n * U+501E CJK UNIFIED IDEOGRAPH-501E: not included in any glyphset definition\n * U+5022 CJK UNIFIED IDEOGRAPH-5022: try adding one of: chinese-traditional, chinese-hongkong\n * U+5040 CJK UNIFIED IDEOGRAPH-5040: not included in any glyphset definition\n * U+5042 CJK UNIFIED IDEOGRAPH-5042: not included in any glyphset definition\n * U+5046 CJK UNIFIED IDEOGRAPH-5046: not included in any glyphset definition\n * U+5070 CJK UNIFIED IDEOGRAPH-5070: not included in any glyphset definition\n * U+5094 CJK UNIFIED IDEOGRAPH-5094: not included in any glyphset definition\n * U+50D8 CJK UNIFIED IDEOGRAPH-50D8: not included in any glyphset definition\n * U+50F4 CJK UNIFIED IDEOGRAPH-50F4: try adding chinese-hongkong\n * U+514A CJK UNIFIED IDEOGRAPH-514A: not included in any glyphset definition\n * U+5164 CJK UNIFIED IDEOGRAPH-5164: not included in any glyphset definition\n * U+519D CJK UNIFIED IDEOGRAPH-519D: not included in any glyphset definition\n * U+51BE CJK UNIFIED IDEOGRAPH-51BE: not included in any glyphset definition\n * U+51EC CJK UNIFIED IDEOGRAPH-51EC: not included in any glyphset definition\n * U+5215 CJK UNIFIED IDEOGRAPH-5215: not included in any glyphset definition\n * U+525D CJK UNIFIED IDEOGRAPH-525D: try adding one of: chinese-traditional, chinese-hongkong\n * U+529C CJK UNIFIED IDEOGRAPH-529C: not included in any glyphset definition\n * U+52A6 CJK UNIFIED IDEOGRAPH-52A6: try adding one of: chinese-traditional, chinese-hongkong\n * U+52AF CJK UNIFIED IDEOGRAPH-52AF: not included in any glyphset definition\n * U+52C0 CJK UNIFIED IDEOGRAPH-52C0: not included in any glyphset definition\n * U+52DB CJK UNIFIED IDEOGRAPH-52DB: try adding one of: chinese-traditional, chinese-hongkong\n * U+5300 CJK UNIFIED IDEOGRAPH-5300: try adding chinese-simplified\n * U+5307 CJK UNIFIED IDEOGRAPH-5307: not included in any glyphset definition\n * U+5324 CJK UNIFIED IDEOGRAPH-5324: try adding chinese-hongkong\n * U+5372 CJK UNIFIED IDEOGRAPH-5372: not included in any glyphset definition\n * U+537D CJK UNIFIED IDEOGRAPH-537D: not included in any glyphset definition\n * U+5393 CJK UNIFIED IDEOGRAPH-5393: not included in any glyphset definition\n * U+53B2 CJK UNIFIED IDEOGRAPH-53B2: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+53DD CJK UNIFIED IDEOGRAPH-53DD: not included in any glyphset definition\n * U+541E CJK UNIFIED IDEOGRAPH-541E: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+548A CJK UNIFIED IDEOGRAPH-548A: not included in any glyphset definition\n * U+549C CJK UNIFIED IDEOGRAPH-549C: not included in any glyphset definition\n * U+54A9 CJK UNIFIED IDEOGRAPH-54A9: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+54FF CJK UNIFIED IDEOGRAPH-54FF: not included in any glyphset definition\n * U+555E CJK UNIFIED IDEOGRAPH-555E: try adding one of: chinese-traditional, chinese-hongkong\n * U+5586 CJK UNIFIED IDEOGRAPH-5586: try adding chinese-simplified\n * U+5653 CJK UNIFIED IDEOGRAPH-5653: try adding one of: chinese-traditional, chinese-hongkong\n * U+5699 CJK UNIFIED IDEOGRAPH-5699: try adding one of: chinese-traditional, chinese-hongkong\n * U+56CA CJK UNIFIED IDEOGRAPH-56CA: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+5759 CJK UNIFIED IDEOGRAPH-5759: not included in any glyphset definition\n * U+5765 CJK UNIFIED IDEOGRAPH-5765: not included in any glyphset definition\n * U+57AC CJK UNIFIED IDEOGRAPH-57AC: not included in any glyphset definition\n * U+57C7 CJK UNIFIED IDEOGRAPH-57C7: try adding chinese-simplified\n * U+57C8 CJK UNIFIED IDEOGRAPH-57C8: not included in any glyphset definition\n * U+5861 CJK UNIFIED IDEOGRAPH-5861: not included in any glyphset definition\n * U+589E CJK UNIFIED IDEOGRAPH-589E: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+58B2 CJK UNIFIED IDEOGRAPH-58B2: not included in any glyphset definition\n * U+590B CJK UNIFIED IDEOGRAPH-590B: try adding chinese-simplified\n * U+5953 CJK UNIFIED IDEOGRAPH-5953: not included in any glyphset definition\n * U+595B CJK UNIFIED IDEOGRAPH-595B: not included in any glyphset definition\n * U+595D CJK UNIFIED IDEOGRAPH-595D: not included in any glyphset definition\n * U+5963 CJK UNIFIED IDEOGRAPH-5963: not included in any glyphset definition\n * U+59A4 CJK UNIFIED IDEOGRAPH-59A4: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+59BA CJK UNIFIED IDEOGRAPH-59BA: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+59F8 CJK UNIFIED IDEOGRAPH-59F8: not included in any glyphset definition\n * U+5B56 CJK UNIFIED IDEOGRAPH-5B56: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+5BC0 CJK UNIFIED IDEOGRAPH-5BC0: not included in any glyphset definition\n * U+5BD8 CJK UNIFIED IDEOGRAPH-5BD8: not included in any glyphset definition\n * U+5BEC CJK UNIFIED IDEOGRAPH-5BEC: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+5C1E CJK UNIFIED IDEOGRAPH-5C1E: not included in any glyphset definition\n * U+5C5B CJK UNIFIED IDEOGRAPH-5C5B: not included in any glyphset definition\n * U+5C62 CJK UNIFIED IDEOGRAPH-5C62: try adding one of: chinese-traditional, chinese-hongkong\n * U+5CA6 CJK UNIFIED IDEOGRAPH-5CA6: try adding one of: chinese-traditional, chinese-hongkong\n * U+5CBA CJK UNIFIED IDEOGRAPH-5CBA: not included in any glyphset definition\n * U+5CF5 CJK UNIFIED IDEOGRAPH-5CF5: not included in any glyphset definition\n * U+5D27 CJK UNIFIED IDEOGRAPH-5D27: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+5D42 CJK UNIFIED IDEOGRAPH-5D42: not included in any glyphset definition\n * U+5D53 CJK UNIFIED IDEOGRAPH-5D53: not included in any glyphset definition\n * U+5D6D CJK UNIFIED IDEOGRAPH-5D6D: not included in any glyphset definition\n * U+5DB8 CJK UNIFIED IDEOGRAPH-5DB8: try adding one of: chinese-traditional, chinese-hongkong\n * U+5DB9 CJK UNIFIED IDEOGRAPH-5DB9: try adding chinese-hongkong\n * U+5DD0 CJK UNIFIED IDEOGRAPH-5DD0: not included in any glyphset definition\n * U+5DE2 CJK UNIFIED IDEOGRAPH-5DE2: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+5E77 CJK UNIFIED IDEOGRAPH-5E77: not included in any glyphset definition\n * U+5F21 CJK UNIFIED IDEOGRAPH-5F21: not included in any glyphset definition\n * U+5F34 CJK UNIFIED IDEOGRAPH-5F34: not included in any glyphset definition\n * U+5F45 CJK UNIFIED IDEOGRAPH-5F45: not included in any glyphset definition\n * U+5F67 CJK UNIFIED IDEOGRAPH-5F67: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+5FB5 CJK UNIFIED IDEOGRAPH-5FB5: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+5FB7 CJK UNIFIED IDEOGRAPH-5FB7: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+5FDE CJK UNIFIED IDEOGRAPH-5FDE: not included in any glyphset definition\n * U+605D CJK UNIFIED IDEOGRAPH-605D: not included in any glyphset definition\n * U+6085 CJK UNIFIED IDEOGRAPH-6085: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+608A CJK UNIFIED IDEOGRAPH-608A: try adding chinese-simplified\n * U+60D5 CJK UNIFIED IDEOGRAPH-60D5: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+60DE CJK UNIFIED IDEOGRAPH-60DE: try adding chinese-hongkong\n * U+60F2 CJK UNIFIED IDEOGRAPH-60F2: try adding one of: chinese-traditional, chinese-hongkong\n * U+6111 CJK UNIFIED IDEOGRAPH-6111: not included in any glyphset definition\n * U+6120 CJK UNIFIED IDEOGRAPH-6120: try adding chinese-simplified\n * U+6130 CJK UNIFIED IDEOGRAPH-6130: not included in any glyphset definition\n * U+6137 CJK UNIFIED IDEOGRAPH-6137: try adding one of: chinese-traditional, chinese-hongkong\n * U+6198 CJK UNIFIED IDEOGRAPH-6198: try adding chinese-hongkong\n * U+6213 CJK UNIFIED IDEOGRAPH-6213: not included in any glyphset definition\n * U+62A6 CJK UNIFIED IDEOGRAPH-62A6: not included in any glyphset definition\n * U+63ED CJK UNIFIED IDEOGRAPH-63ED: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+63F5 CJK UNIFIED IDEOGRAPH-63F5: not included in any glyphset definition\n * U+6414 CJK UNIFIED IDEOGRAPH-6414: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6451 CJK UNIFIED IDEOGRAPH-6451: try adding one of: chinese-traditional, chinese-hongkong\n * U+6460 CJK UNIFIED IDEOGRAPH-6460: not included in any glyphset definition\n * U+649D CJK UNIFIED IDEOGRAPH-649D: not included in any glyphset definition\n * U+64CA CJK UNIFIED IDEOGRAPH-64CA: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+64CE CJK UNIFIED IDEOGRAPH-64CE: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6522 CJK UNIFIED IDEOGRAPH-6522: try adding one of: chinese-traditional, chinese-hongkong\n * U+654E CJK UNIFIED IDEOGRAPH-654E: not included in any glyphset definition\n * U+6600 CJK UNIFIED IDEOGRAPH-6600: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6609 CJK UNIFIED IDEOGRAPH-6609: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6615 CJK UNIFIED IDEOGRAPH-6615: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+661E CJK UNIFIED IDEOGRAPH-661E: not included in any glyphset definition\n * U+6624 CJK UNIFIED IDEOGRAPH-6624: not included in any glyphset definition\n * U+662E CJK UNIFIED IDEOGRAPH-662E: not included in any glyphset definition\n * U+6631 CJK UNIFIED IDEOGRAPH-6631: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+663B CJK UNIFIED IDEOGRAPH-663B: not included in any glyphset definition\n * U+6657 CJK UNIFIED IDEOGRAPH-6657: try adding chinese-simplified\n * U+6659 CJK UNIFIED IDEOGRAPH-6659: not included in any glyphset definition\n * U+665A CJK UNIFIED IDEOGRAPH-665A: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6665 CJK UNIFIED IDEOGRAPH-6665: not included in any glyphset definition\n * U+6673 CJK UNIFIED IDEOGRAPH-6673: not included in any glyphset definition\n * U+6699 CJK UNIFIED IDEOGRAPH-6699: not included in any glyphset definition\n * U+66A0 CJK UNIFIED IDEOGRAPH-66A0: not included in any glyphset definition\n * U+66B2 CJK UNIFIED IDEOGRAPH-66B2: not included in any glyphset definition\n * U+66BF CJK UNIFIED IDEOGRAPH-66BF: try adding chinese-hongkong\n * U+66C6 CJK UNIFIED IDEOGRAPH-66C6: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+66FA CJK UNIFIED IDEOGRAPH-66FA: not included in any glyphset definition\n * U+66FB CJK UNIFIED IDEOGRAPH-66FB: not included in any glyphset definition\n * U+670E CJK UNIFIED IDEOGRAPH-670E: try adding chinese-hongkong\n * U+6766 CJK UNIFIED IDEOGRAPH-6766: not included in any glyphset definition\n * U+67BB CJK UNIFIED IDEOGRAPH-67BB: not included in any glyphset definition\n * U+67C0 CJK UNIFIED IDEOGRAPH-67C0: not included in any glyphset definition\n * U+67FA CJK UNIFIED IDEOGRAPH-67FA: try adding one of: chinese-traditional, chinese-hongkong\n * U+6801 CJK UNIFIED IDEOGRAPH-6801: not included in any glyphset definition\n * U+6805 CJK UNIFIED IDEOGRAPH-6805: try adding chinese-simplified\n * U+6844 CJK UNIFIED IDEOGRAPH-6844: not included in any glyphset definition\n * U+6852 CJK UNIFIED IDEOGRAPH-6852: not included in any glyphset definition\n * U+688E CJK UNIFIED IDEOGRAPH-688E: not included in any glyphset definition\n * U+68C8 CJK UNIFIED IDEOGRAPH-68C8: not included in any glyphset definition\n * U+68CF CJK UNIFIED IDEOGRAPH-68CF: not included in any glyphset definition\n * U+6968 CJK UNIFIED IDEOGRAPH-6968: try adding one of: chinese-traditional, chinese-hongkong\n * U+6998 CJK UNIFIED IDEOGRAPH-6998: not included in any glyphset definition\n * U+69E2 CJK UNIFIED IDEOGRAPH-69E2: not included in any glyphset definition\n * U+6A30 CJK UNIFIED IDEOGRAPH-6A30: not included in any glyphset definition\n * U+6A46 CJK UNIFIED IDEOGRAPH-6A46: not included in any glyphset definition\n * U+6A6B CJK UNIFIED IDEOGRAPH-6A6B: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6A73 CJK UNIFIED IDEOGRAPH-6A73: not included in any glyphset definition\n * U+6A7E CJK UNIFIED IDEOGRAPH-6A7E: try adding chinese-simplified\n * U+6AE2 CJK UNIFIED IDEOGRAPH-6AE2: not included in any glyphset definition\n * U+6AE4 CJK UNIFIED IDEOGRAPH-6AE4: not included in any glyphset definition\n * U+6B65 CJK UNIFIED IDEOGRAPH-6B65: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6B77 CJK UNIFIED IDEOGRAPH-6B77: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6BCF CJK UNIFIED IDEOGRAPH-6BCF: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6BD6 CJK UNIFIED IDEOGRAPH-6BD6: try adding one of: chinese-traditional, chinese-hongkong\n * U+6C3F CJK UNIFIED IDEOGRAPH-6C3F: not included in any glyphset definition\n * U+6C5C CJK UNIFIED IDEOGRAPH-6C5C: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6C6F CJK UNIFIED IDEOGRAPH-6C6F: try adding one of: chinese-traditional, chinese-hongkong\n * U+6C86 CJK UNIFIED IDEOGRAPH-6C86: try adding chinese-simplified\n * U+6CDA CJK UNIFIED IDEOGRAPH-6CDA: not included in any glyphset definition\n * U+6D04 CJK UNIFIED IDEOGRAPH-6D04: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6D6F CJK UNIFIED IDEOGRAPH-6D6F: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6D87 CJK UNIFIED IDEOGRAPH-6D87: try adding one of: chinese-traditional, chinese-hongkong\n * U+6D89 CJK UNIFIED IDEOGRAPH-6D89: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6D96 CJK UNIFIED IDEOGRAPH-6D96: try adding chinese-hongkong\n * U+6DAC CJK UNIFIED IDEOGRAPH-6DAC: not included in any glyphset definition\n * U+6DCF CJK UNIFIED IDEOGRAPH-6DCF: try adding one of: chinese-traditional, chinese-hongkong\n * U+6DDA CJK UNIFIED IDEOGRAPH-6DDA: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6DF2 CJK UNIFIED IDEOGRAPH-6DF2: not included in any glyphset definition\n * U+6DF8 CJK UNIFIED IDEOGRAPH-6DF8: try adding chinese-simplified\n * U+6DFC CJK UNIFIED IDEOGRAPH-6DFC: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6E27 CJK UNIFIED IDEOGRAPH-6E27: not included in any glyphset definition\n * U+6E34 CJK UNIFIED IDEOGRAPH-6E34: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6E39 CJK UNIFIED IDEOGRAPH-6E39: try adding chinese-simplified\n * U+6E3C CJK UNIFIED IDEOGRAPH-6E3C: try adding one of: chinese-traditional, chinese-hongkong\n * U+6E5C CJK UNIFIED IDEOGRAPH-6E5C: not included in any glyphset definition\n * U+6EAB CJK UNIFIED IDEOGRAPH-6EAB: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6EBF CJK UNIFIED IDEOGRAPH-6EBF: not included in any glyphset definition\n * U+6F51 CJK UNIFIED IDEOGRAPH-6F51: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6F88 CJK UNIFIED IDEOGRAPH-6F88: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+6FB5 CJK UNIFIED IDEOGRAPH-6FB5: try adding chinese-hongkong\n * U+6FF5 CJK UNIFIED IDEOGRAPH-6FF5: not included in any glyphset definition\n * U+7005 CJK UNIFIED IDEOGRAPH-7005: try adding one of: chinese-traditional, chinese-hongkong\n * U+7006 CJK UNIFIED IDEOGRAPH-7006: try adding one of: chinese-traditional, chinese-hongkong\n * U+7007 CJK UNIFIED IDEOGRAPH-7007: not included in any glyphset definition\n * U+7028 CJK UNIFIED IDEOGRAPH-7028: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+7085 CJK UNIFIED IDEOGRAPH-7085: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+70AB CJK UNIFIED IDEOGRAPH-70AB: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+70BB CJK UNIFIED IDEOGRAPH-70BB: not included in any glyphset definition\n * U+7104 CJK UNIFIED IDEOGRAPH-7104: not included in any glyphset definition\n * U+710F CJK UNIFIED IDEOGRAPH-710F: not included in any glyphset definition\n * U+7130 CJK UNIFIED IDEOGRAPH-7130: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+7146 CJK UNIFIED IDEOGRAPH-7146: try adding one of: chinese-traditional, chinese-hongkong\n * U+7147 CJK UNIFIED IDEOGRAPH-7147: try adding one of: chinese-traditional, chinese-hongkong\n * U+715C CJK UNIFIED IDEOGRAPH-715C: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+71C1 CJK UNIFIED IDEOGRAPH-71C1: try adding one of: chinese-traditional, chinese-hongkong\n * U+71FE CJK UNIFIED IDEOGRAPH-71FE: try adding one of: chinese-traditional, chinese-hongkong\n * U+72B1 CJK UNIFIED IDEOGRAPH-72B1: not included in any glyphset definition\n * U+72BE CJK UNIFIED IDEOGRAPH-72BE: not included in any glyphset definition\n * U+72C0 CJK UNIFIED IDEOGRAPH-72C0: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+7324 CJK UNIFIED IDEOGRAPH-7324: not included in any glyphset definition\n * U+7377 CJK UNIFIED IDEOGRAPH-7377: try adding one of: chinese-traditional, chinese-hongkong\n * U+73BD CJK UNIFIED IDEOGRAPH-73BD: not included in any glyphset definition\n * U+73C9 CJK UNIFIED IDEOGRAPH-73C9: try adding chinese-simplified\n * U+73D2 CJK UNIFIED IDEOGRAPH-73D2: not included in any glyphset definition\n * U+73D6 CJK UNIFIED IDEOGRAPH-73D6: not included in any glyphset definition\n * U+73E3 CJK UNIFIED IDEOGRAPH-73E3: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+73F5 CJK UNIFIED IDEOGRAPH-73F5: not included in any glyphset definition\n * U+7407 CJK UNIFIED IDEOGRAPH-7407: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+7426 CJK UNIFIED IDEOGRAPH-7426: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+7429 CJK UNIFIED IDEOGRAPH-7429: not included in any glyphset definition\n * U+742A CJK UNIFIED IDEOGRAPH-742A: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+742E CJK UNIFIED IDEOGRAPH-742E: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+7462 CJK UNIFIED IDEOGRAPH-7462: try adding one of: chinese-traditional, chinese-hongkong\n * U+7489 CJK UNIFIED IDEOGRAPH-7489: try adding one of: chinese-traditional, chinese-hongkong\n * U+749F CJK UNIFIED IDEOGRAPH-749F: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+7501 CJK UNIFIED IDEOGRAPH-7501: not included in any glyphset definition\n * U+752F CJK UNIFIED IDEOGRAPH-752F: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+756F CJK UNIFIED IDEOGRAPH-756F: try adding one of: chinese-traditional, chinese-hongkong\n * U+7626 CJK UNIFIED IDEOGRAPH-7626: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+7682 CJK UNIFIED IDEOGRAPH-7682: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+769B CJK UNIFIED IDEOGRAPH-769B: not included in any glyphset definition\n * U+769C CJK UNIFIED IDEOGRAPH-769C: not included in any glyphset definition\n * U+769E CJK UNIFIED IDEOGRAPH-769E: not included in any glyphset definition\n * U+76A6 CJK UNIFIED IDEOGRAPH-76A6: not included in any glyphset definition\n * U+7746 CJK UNIFIED IDEOGRAPH-7746: not included in any glyphset definition\n * U+7762 CJK UNIFIED IDEOGRAPH-7762: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+7821 CJK UNIFIED IDEOGRAPH-7821: not included in any glyphset definition\n * U+784E CJK UNIFIED IDEOGRAPH-784E: not included in any glyphset definition\n * U+7864 CJK UNIFIED IDEOGRAPH-7864: try adding one of: chinese-traditional, chinese-hongkong\n * U+787A CJK UNIFIED IDEOGRAPH-787A: try adding chinese-hongkong\n * U+7930 CJK UNIFIED IDEOGRAPH-7930: not included in any glyphset definition\n * U+7994 CJK UNIFIED IDEOGRAPH-7994: try adding one of: chinese-traditional, chinese-hongkong\n * U+799B CJK UNIFIED IDEOGRAPH-799B: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+79B1 CJK UNIFIED IDEOGRAPH-79B1: try adding one of: chinese-traditional, chinese-hongkong\n * U+7AD1 CJK UNIFIED IDEOGRAPH-7AD1: try adding one of: chinese-traditional, chinese-hongkong\n * U+7AE7 CJK UNIFIED IDEOGRAPH-7AE7: try adding chinese-hongkong\n * U+7AEB CJK UNIFIED IDEOGRAPH-7AEB: not included in any glyphset definition\n * U+7B9E CJK UNIFIED IDEOGRAPH-7B9E: not included in any glyphset definition\n * U+7C1E CJK UNIFIED IDEOGRAPH-7C1E: try adding one of: chinese-traditional, chinese-hongkong\n * U+7D48 CJK UNIFIED IDEOGRAPH-7D48: not included in any glyphset definition\n * U+7D5C CJK UNIFIED IDEOGRAPH-7D5C: try adding one of: chinese-traditional, chinese-hongkong\n * U+7DA0 CJK UNIFIED IDEOGRAPH-7DA0: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+7DB7 CJK UNIFIED IDEOGRAPH-7DB7: not included in any glyphset definition\n * U+7DD6 CJK UNIFIED IDEOGRAPH-7DD6: not included in any glyphset definition\n * U+7DE3 CJK UNIFIED IDEOGRAPH-7DE3: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+7E52 CJK UNIFIED IDEOGRAPH-7E52: try adding one of: chinese-traditional, chinese-hongkong\n * U+7E61 CJK UNIFIED IDEOGRAPH-7E61: try adding one of: chinese-traditional, chinese-hongkong\n * U+7E6B CJK UNIFIED IDEOGRAPH-7E6B: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+7E8A CJK UNIFIED IDEOGRAPH-7E8A: not included in any glyphset definition\n * U+7F47 CJK UNIFIED IDEOGRAPH-7F47: not included in any glyphset definition\n * U+7FA1 CJK UNIFIED IDEOGRAPH-7FA1: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+8301 CJK UNIFIED IDEOGRAPH-8301: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+8346 CJK UNIFIED IDEOGRAPH-8346: try adding chinese-simplified\n * U+8362 CJK UNIFIED IDEOGRAPH-8362: try adding chinese-hongkong\n * U+837F CJK UNIFIED IDEOGRAPH-837F: not included in any glyphset definition\n * U+83C7 CJK UNIFIED IDEOGRAPH-83C7: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+83F6 CJK UNIFIED IDEOGRAPH-83F6: not included in any glyphset definition\n * U+840A CJK UNIFIED IDEOGRAPH-840A: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+8448 CJK UNIFIED IDEOGRAPH-8448: try adding chinese-hongkong\n * U+84B4 CJK UNIFIED IDEOGRAPH-84B4: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+84DC CJK UNIFIED IDEOGRAPH-84DC: not included in any glyphset definition\n * U+8523 CJK UNIFIED IDEOGRAPH-8523: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+853E CJK UNIFIED IDEOGRAPH-853E: not included in any glyphset definition\n * U+8553 CJK UNIFIED IDEOGRAPH-8553: try adding one of: chinese-traditional, chinese-hongkong\n * U+8559 CJK UNIFIED IDEOGRAPH-8559: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+856B CJK UNIFIED IDEOGRAPH-856B: not included in any glyphset definition\n * U+85B0 CJK UNIFIED IDEOGRAPH-85B0: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+865B CJK UNIFIED IDEOGRAPH-865B: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+87EC CJK UNIFIED IDEOGRAPH-87EC: try adding one of: chinese-traditional, chinese-hongkong\n * U+8807 CJK UNIFIED IDEOGRAPH-8807: not included in any glyphset definition\n * U+881F CJK UNIFIED IDEOGRAPH-881F: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+88F5 CJK UNIFIED IDEOGRAPH-88F5: not included in any glyphset definition\n * U+891C CJK UNIFIED IDEOGRAPH-891C: not included in any glyphset definition\n * U+8A12 CJK UNIFIED IDEOGRAPH-8A12: not included in any glyphset definition\n * U+8A37 CJK UNIFIED IDEOGRAPH-8A37: not included in any glyphset definition\n * U+8A79 CJK UNIFIED IDEOGRAPH-8A79: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+8AA7 CJK UNIFIED IDEOGRAPH-8AA7: not included in any glyphset definition\n * U+8ABE CJK UNIFIED IDEOGRAPH-8ABE: try adding one of: chinese-traditional, chinese-hongkong\n * U+8ADF CJK UNIFIED IDEOGRAPH-8ADF: not included in any glyphset definition\n * U+8AF6 CJK UNIFIED IDEOGRAPH-8AF6: try adding one of: chinese-traditional, chinese-hongkong\n * U+8B53 CJK UNIFIED IDEOGRAPH-8B53: not included in any glyphset definition\n * U+8B7F CJK UNIFIED IDEOGRAPH-8B7F: not included in any glyphset definition\n * U+8CF0 CJK UNIFIED IDEOGRAPH-8CF0: not included in any glyphset definition\n * U+8CF4 CJK UNIFIED IDEOGRAPH-8CF4: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+8D12 CJK UNIFIED IDEOGRAPH-8D12: not included in any glyphset definition\n * U+8D76 CJK UNIFIED IDEOGRAPH-8D76: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+8EC0 CJK UNIFIED IDEOGRAPH-8EC0: try adding one of: chinese-traditional, chinese-hongkong\n * U+8ECF CJK UNIFIED IDEOGRAPH-8ECF: not included in any glyphset definition\n * U+9067 CJK UNIFIED IDEOGRAPH-9067: not included in any glyphset definition\n * U+90DE CJK UNIFIED IDEOGRAPH-90DE: try adding chinese-simplified\n * U+9115 CJK UNIFIED IDEOGRAPH-9115: not included in any glyphset definition\n * U+9127 CJK UNIFIED IDEOGRAPH-9127: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+91AC CJK UNIFIED IDEOGRAPH-91AC: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+91B1 CJK UNIFIED IDEOGRAPH-91B1: try adding one of: chinese-traditional, chinese-hongkong\n * U+91D7 CJK UNIFIED IDEOGRAPH-91D7: try adding one of: chinese-traditional, chinese-hongkong\n * U+91DA CJK UNIFIED IDEOGRAPH-91DA: not included in any glyphset definition\n * U+91DE CJK UNIFIED IDEOGRAPH-91DE: not included in any glyphset definition\n * U+91E4 CJK UNIFIED IDEOGRAPH-91E4: try adding one of: chinese-traditional, chinese-hongkong\n * U+91E5 CJK UNIFIED IDEOGRAPH-91E5: try adding chinese-hongkong\n * U+91ED CJK UNIFIED IDEOGRAPH-91ED: not included in any glyphset definition\n * U+91EE CJK UNIFIED IDEOGRAPH-91EE: not included in any glyphset definition\n * U+9206 CJK UNIFIED IDEOGRAPH-9206: not included in any glyphset definition\n * U+920A CJK UNIFIED IDEOGRAPH-920A: try adding one of: chinese-traditional, chinese-hongkong\n * U+9210 CJK UNIFIED IDEOGRAPH-9210: try adding one of: chinese-traditional, chinese-hongkong\n * U+9239 CJK UNIFIED IDEOGRAPH-9239: try adding one of: chinese-traditional, chinese-hongkong\n * U+923A CJK UNIFIED IDEOGRAPH-923A: try adding one of: chinese-traditional, chinese-hongkong\n * U+923C CJK UNIFIED IDEOGRAPH-923C: try adding chinese-hongkong\n * U+9240 CJK UNIFIED IDEOGRAPH-9240: try adding one of: chinese-traditional, chinese-hongkong\n * U+924E CJK UNIFIED IDEOGRAPH-924E: not included in any glyphset definition\n * U+9251 CJK UNIFIED IDEOGRAPH-9251: try adding one of: chinese-traditional, chinese-hongkong\n * U+9259 CJK UNIFIED IDEOGRAPH-9259: not included in any glyphset definition\n * U+9267 CJK UNIFIED IDEOGRAPH-9267: not included in any glyphset definition\n * U+9277 CJK UNIFIED IDEOGRAPH-9277: try adding chinese-hongkong\n * U+9278 CJK UNIFIED IDEOGRAPH-9278: try adding one of: chinese-traditional, chinese-hongkong\n * U+9288 CJK UNIFIED IDEOGRAPH-9288: not included in any glyphset definition\n * U+92A7 CJK UNIFIED IDEOGRAPH-92A7: try adding one of: chinese-traditional, chinese-hongkong\n * U+92D0 CJK UNIFIED IDEOGRAPH-92D0: try adding one of: chinese-traditional, chinese-hongkong\n * U+92D3 CJK UNIFIED IDEOGRAPH-92D3: not included in any glyphset definition\n * U+92D5 CJK UNIFIED IDEOGRAPH-92D5: try adding one of: chinese-traditional, chinese-hongkong\n * U+92D7 CJK UNIFIED IDEOGRAPH-92D7: not included in any glyphset definition\n * U+92D9 CJK UNIFIED IDEOGRAPH-92D9: not included in any glyphset definition\n * U+92E0 CJK UNIFIED IDEOGRAPH-92E0: not included in any glyphset definition\n * U+92E7 CJK UNIFIED IDEOGRAPH-92E7: not included in any glyphset definition\n * U+92F9 CJK UNIFIED IDEOGRAPH-92F9: not included in any glyphset definition\n * U+92FB CJK UNIFIED IDEOGRAPH-92FB: not included in any glyphset definition\n * U+92FF CJK UNIFIED IDEOGRAPH-92FF: not included in any glyphset definition\n * U+9302 CJK UNIFIED IDEOGRAPH-9302: not included in any glyphset definition\n * U+9304 CJK UNIFIED IDEOGRAPH-9304: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+931D CJK UNIFIED IDEOGRAPH-931D: not included in any glyphset definition\n * U+931E CJK UNIFIED IDEOGRAPH-931E: try adding one of: chinese-traditional, chinese-hongkong\n * U+9321 CJK UNIFIED IDEOGRAPH-9321: try adding one of: chinese-traditional, chinese-hongkong\n * U+9325 CJK UNIFIED IDEOGRAPH-9325: not included in any glyphset definition\n * U+9348 CJK UNIFIED IDEOGRAPH-9348: not included in any glyphset definition\n * U+934A CJK UNIFIED IDEOGRAPH-934A: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+9357 CJK UNIFIED IDEOGRAPH-9357: try adding chinese-simplified\n * U+9370 CJK UNIFIED IDEOGRAPH-9370: try adding one of: chinese-traditional, chinese-hongkong\n * U+93A4 CJK UNIFIED IDEOGRAPH-93A4: not included in any glyphset definition\n * U+93C6 CJK UNIFIED IDEOGRAPH-93C6: try adding chinese-hongkong\n * U+93DE CJK UNIFIED IDEOGRAPH-93DE: try adding one of: chinese-traditional, chinese-hongkong\n * U+93F8 CJK UNIFIED IDEOGRAPH-93F8: not included in any glyphset definition\n * U+9431 CJK UNIFIED IDEOGRAPH-9431: not included in any glyphset definition\n * U+9445 CJK UNIFIED IDEOGRAPH-9445: not included in any glyphset definition\n * U+9448 CJK UNIFIED IDEOGRAPH-9448: not included in any glyphset definition\n * U+9592 CJK UNIFIED IDEOGRAPH-9592: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+969D CJK UNIFIED IDEOGRAPH-969D: not included in any glyphset definition\n * U+96AF CJK UNIFIED IDEOGRAPH-96AF: not included in any glyphset definition\n * U+9733 CJK UNIFIED IDEOGRAPH-9733: not included in any glyphset definition\n * U+973B CJK UNIFIED IDEOGRAPH-973B: not included in any glyphset definition\n * U+9743 CJK UNIFIED IDEOGRAPH-9743: not included in any glyphset definition\n * U+974D CJK UNIFIED IDEOGRAPH-974D: not included in any glyphset definition\n * U+974F CJK UNIFIED IDEOGRAPH-974F: not included in any glyphset definition\n * U+9751 CJK UNIFIED IDEOGRAPH-9751: try adding chinese-simplified\n * U+9755 CJK UNIFIED IDEOGRAPH-9755: try adding chinese-hongkong\n * U+9830 CJK UNIFIED IDEOGRAPH-9830: try adding one of: chinese-traditional, chinese-hongkong\n * U+9857 CJK UNIFIED IDEOGRAPH-9857: try adding one of: chinese-traditional, chinese-hongkong\n * U+985A CJK UNIFIED IDEOGRAPH-985A: not included in any glyphset definition\n * U+9865 CJK UNIFIED IDEOGRAPH-9865: try adding one of: chinese-traditional, chinese-hongkong\n * U+9927 CJK UNIFIED IDEOGRAPH-9927: not included in any glyphset definition\n * U+999E CJK UNIFIED IDEOGRAPH-999E: not included in any glyphset definition\n * U+9A4E CJK UNIFIED IDEOGRAPH-9A4E: not included in any glyphset definition\n * U+9A52 CJK UNIFIED IDEOGRAPH-9A52: try adding one of: chinese-traditional, chinese-hongkong\n * U+9AD9 CJK UNIFIED IDEOGRAPH-9AD9: try adding chinese-simplified\n * U+9ADC CJK UNIFIED IDEOGRAPH-9ADC: not included in any glyphset definition\n * U+9B72 CJK UNIFIED IDEOGRAPH-9B72: not included in any glyphset definition\n * U+9B75 CJK UNIFIED IDEOGRAPH-9B75: not included in any glyphset definition\n * U+9B8F CJK UNIFIED IDEOGRAPH-9B8F: try adding chinese-hongkong\n * U+9BB1 CJK UNIFIED IDEOGRAPH-9BB1: not included in any glyphset definition\n * U+9BBB CJK UNIFIED IDEOGRAPH-9BBB: not included in any glyphset definition\n * U+9C00 CJK UNIFIED IDEOGRAPH-9C00: not included in any glyphset definition\n * U+9D6B CJK UNIFIED IDEOGRAPH-9D6B: not included in any glyphset definition\n * U+9D70 CJK UNIFIED IDEOGRAPH-9D70: try adding one of: chinese-traditional, chinese-hongkong\n * U+9DD7 CJK UNIFIED IDEOGRAPH-9DD7: try adding one of: chinese-traditional, chinese-hongkong\n * U+9E19 CJK UNIFIED IDEOGRAPH-9E19: not included in any glyphset definition\n * U+9E7C CJK UNIFIED IDEOGRAPH-9E7C: try adding one of: chinese-traditional, chinese-hongkong\n * U+9EB4 CJK UNIFIED IDEOGRAPH-9EB4: try adding one of: chinese-traditional, chinese-hongkong\n * U+9EB5 CJK UNIFIED IDEOGRAPH-9EB5: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+9EC3 CJK UNIFIED IDEOGRAPH-9EC3: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+9ED1 CJK UNIFIED IDEOGRAPH-9ED1: try adding one of: chinese-simplified, chinese-traditional, chinese-hongkong\n * U+F91D CJK COMPATIBILITY IDEOGRAPH-F91D: not included in any glyphset definition\n * U+F928 CJK COMPATIBILITY IDEOGRAPH-F928: not included in any glyphset definition\n * U+F929 CJK COMPATIBILITY IDEOGRAPH-F929: not included in any glyphset definition\n * U+F936 CJK COMPATIBILITY IDEOGRAPH-F936: not included in any glyphset definition\n * U+F999 CJK COMPATIBILITY IDEOGRAPH-F999: not included in any glyphset definition\n * U+F9C3 CJK COMPATIBILITY IDEOGRAPH-F9C3: not included in any glyphset definition\n * U+F9D0 CJK COMPATIBILITY IDEOGRAPH-F9D0: not included in any glyphset definition\n * U+F9DC CJK COMPATIBILITY IDEOGRAPH-F9DC: not included in any glyphset definition\n * U+FA0E CJK COMPATIBILITY IDEOGRAPH-FA0E: not included in any glyphset definition\n * U+FA0F CJK COMPATIBILITY IDEOGRAPH-FA0F: not included in any glyphset definition\n * U+FA10 CJK COMPATIBILITY IDEOGRAPH-FA10: not included in any glyphset definition\n * U+FA11 CJK COMPATIBILITY IDEOGRAPH-FA11: not included in any glyphset definition\n * U+FA12 CJK COMPATIBILITY IDEOGRAPH-FA12: not included in any glyphset definition\n * U+FA13 CJK COMPATIBILITY IDEOGRAPH-FA13: not included in any glyphset definition\n * U+FA14 CJK COMPATIBILITY IDEOGRAPH-FA14: not included in any glyphset definition\n * U+FA15 CJK COMPATIBILITY IDEOGRAPH-FA15: not included in any glyphset definition\n * U+FA16 CJK COMPATIBILITY IDEOGRAPH-FA16: not included in any glyphset definition\n * U+FA17 CJK COMPATIBILITY IDEOGRAPH-FA17: not included in any glyphset definition\n * U+FA18 CJK COMPATIBILITY IDEOGRAPH-FA18: not included in any glyphset definition\n * U+FA19 CJK COMPATIBILITY IDEOGRAPH-FA19: not included in any glyphset definition\n * U+FA1A CJK COMPATIBILITY IDEOGRAPH-FA1A: not included in any glyphset definition\n * U+FA1B CJK COMPATIBILITY IDEOGRAPH-FA1B: not included in any glyphset definition\n * U+FA1C CJK COMPATIBILITY IDEOGRAPH-FA1C: not included in any glyphset definition\n * U+FA1D CJK COMPATIBILITY IDEOGRAPH-FA1D: not included in any glyphset definition\n * U+FA1E CJK COMPATIBILITY IDEOGRAPH-FA1E: not included in any glyphset definition\n * U+FA1F CJK COMPATIBILITY IDEOGRAPH-FA1F: not included in any glyphset definition\n * U+FA20 CJK COMPATIBILITY IDEOGRAPH-FA20: not included in any glyphset definition\n * U+FA21 CJK COMPATIBILITY IDEOGRAPH-FA21: not included in any glyphset definition\n * U+FA22 CJK COMPATIBILITY IDEOGRAPH-FA22: not included in any glyphset definition\n * U+FA23 CJK COMPATIBILITY IDEOGRAPH-FA23: not included in any glyphset definition\n * U+FA24 CJK COMPATIBILITY IDEOGRAPH-FA24: not included in any glyphset definition\n * U+FA25 CJK COMPATIBILITY IDEOGRAPH-FA25: not included in any glyphset definition\n * U+FA26 CJK COMPATIBILITY IDEOGRAPH-FA26: not included in any glyphset definition\n * U+FA27 CJK COMPATIBILITY IDEOGRAPH-FA27: not included in any glyphset definition\n * U+FA28 CJK COMPATIBILITY IDEOGRAPH-FA28: not included in any glyphset definition\n * U+FA29 CJK COMPATIBILITY IDEOGRAPH-FA29: not included in any glyphset definition\n * U+FA2A CJK COMPATIBILITY IDEOGRAPH-FA2A: not included in any glyphset definition\n * U+FA2B CJK COMPATIBILITY IDEOGRAPH-FA2B: not included in any glyphset definition\n * U+FA2C CJK COMPATIBILITY IDEOGRAPH-FA2C: not included in any glyphset definition\n * U+FA2D CJK COMPATIBILITY IDEOGRAPH-FA2D: not included in any glyphset definition\n * U+FA30 CJK COMPATIBILITY IDEOGRAPH-FA30: not included in any glyphset definition\n * U+FA31 CJK COMPATIBILITY IDEOGRAPH-FA31: not included in any glyphset definition\n * U+FA33 CJK COMPATIBILITY IDEOGRAPH-FA33: not included in any glyphset definition\n * U+FA34 CJK COMPATIBILITY IDEOGRAPH-FA34: not included in any glyphset definition\n * U+FA35 CJK COMPATIBILITY IDEOGRAPH-FA35: not included in any glyphset definition\n * U+FA36 CJK COMPATIBILITY IDEOGRAPH-FA36: not included in any glyphset definition\n * U+FA37 CJK COMPATIBILITY IDEOGRAPH-FA37: not included in any glyphset definition\n * U+FA38 CJK COMPATIBILITY IDEOGRAPH-FA38: not included in any glyphset definition\n * U+FA3A CJK COMPATIBILITY IDEOGRAPH-FA3A: not included in any glyphset definition\n * U+FA3B CJK COMPATIBILITY IDEOGRAPH-FA3B: not included in any glyphset definition\n * U+FA3D CJK COMPATIBILITY IDEOGRAPH-FA3D: not included in any glyphset definition\n * U+FA3F CJK COMPATIBILITY IDEOGRAPH-FA3F: not included in any glyphset definition\n * U+FA40 CJK COMPATIBILITY IDEOGRAPH-FA40: not included in any glyphset definition\n * U+FA41 CJK COMPATIBILITY IDEOGRAPH-FA41: not included in any glyphset definition\n * U+FA43 CJK COMPATIBILITY IDEOGRAPH-FA43: not included in any glyphset definition\n * U+FA44 CJK COMPATIBILITY IDEOGRAPH-FA44: not included in any glyphset definition\n * U+FA45 CJK COMPATIBILITY IDEOGRAPH-FA45: not included in any glyphset definition\n * U+FA46 CJK COMPATIBILITY IDEOGRAPH-FA46: not included in any glyphset definition\n * U+FA47 CJK COMPATIBILITY IDEOGRAPH-FA47: not included in any glyphset definition\n * U+FA48 CJK COMPATIBILITY IDEOGRAPH-FA48: not included in any glyphset definition\n * U+FA4A CJK COMPATIBILITY IDEOGRAPH-FA4A: not included in any glyphset definition\n * U+FA4B CJK COMPATIBILITY IDEOGRAPH-FA4B: not included in any glyphset definition\n * U+FA4C CJK COMPATIBILITY IDEOGRAPH-FA4C: not included in any glyphset definition\n * U+FA4D CJK COMPATIBILITY IDEOGRAPH-FA4D: not included in any glyphset definition\n * U+FA4E CJK COMPATIBILITY IDEOGRAPH-FA4E: not included in any glyphset definition\n * U+FA4F CJK COMPATIBILITY IDEOGRAPH-FA4F: not included in any glyphset definition\n * U+FA50 CJK COMPATIBILITY IDEOGRAPH-FA50: not included in any glyphset definition\n * U+FA51 CJK COMPATIBILITY IDEOGRAPH-FA51: not included in any glyphset definition\n * U+FA52 CJK COMPATIBILITY IDEOGRAPH-FA52: not included in any glyphset definition\n * U+FA53 CJK COMPATIBILITY IDEOGRAPH-FA53: not included in any glyphset definition\n * U+FA54 CJK COMPATIBILITY IDEOGRAPH-FA54: not included in any glyphset definition\n * U+FA55 CJK COMPATIBILITY IDEOGRAPH-FA55: not included in any glyphset definition\n * U+FA56 CJK COMPATIBILITY IDEOGRAPH-FA56: not included in any glyphset definition\n * U+FA57 CJK COMPATIBILITY IDEOGRAPH-FA57: not included in any glyphset definition\n * U+FA59 CJK COMPATIBILITY IDEOGRAPH-FA59: not included in any glyphset definition\n * U+FA5A CJK COMPATIBILITY IDEOGRAPH-FA5A: not included in any glyphset definition\n * U+FA5B CJK COMPATIBILITY IDEOGRAPH-FA5B: not included in any glyphset definition\n * U+FA5C CJK COMPATIBILITY IDEOGRAPH-FA5C: not included in any glyphset definition\n * U+FA5F CJK COMPATIBILITY IDEOGRAPH-FA5F: not included in any glyphset definition\n * U+FA61 CJK COMPATIBILITY IDEOGRAPH-FA61: not included in any glyphset definition\n * U+FA62 CJK COMPATIBILITY IDEOGRAPH-FA62: not included in any glyphset definition\n * U+FA63 CJK COMPATIBILITY IDEOGRAPH-FA63: not included in any glyphset definition\n * U+FA64 CJK COMPATIBILITY IDEOGRAPH-FA64: not included in any glyphset definition\n * U+FA65 CJK COMPATIBILITY IDEOGRAPH-FA65: not included in any glyphset definition\n * U+FA67 CJK COMPATIBILITY IDEOGRAPH-FA67: not included in any glyphset definition\n * U+FA68 CJK COMPATIBILITY IDEOGRAPH-FA68: not included in any glyphset definition\n * U+FA69 CJK COMPATIBILITY IDEOGRAPH-FA69: not included in any glyphset definition\n * U+FA6A CJK COMPATIBILITY IDEOGRAPH-FA6A: not included in any glyphset definition\n * U+FB01 LATIN SMALL LIGATURE FI: not included in any glyphset definition\n * U+FB02 LATIN SMALL LIGATURE FL: not included in any glyphset definition\n * U+FE10 PRESENTATION FORM FOR VERTICAL COMMA: not included in any glyphset definition\n * U+FE11 PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA: not included in any glyphset definition\n * U+FE12 PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP: try adding nushu\n * U+FE31 PRESENTATION FORM FOR VERTICAL EM DASH: try adding chinese-simplified\n * U+FE32 PRESENTATION FORM FOR VERTICAL EN DASH: not included in any glyphset definition\n * U+FE33 PRESENTATION FORM FOR VERTICAL LOW LINE: not included in any glyphset definition\n * U+FE35 PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS: try adding chinese-simplified\n * U+FE36 PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS: try adding chinese-simplified\n * U+FE37 PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET: not included in any glyphset definition\n * U+FE38 PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET: not included in any glyphset definition\n * U+FE39 PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET: try adding chinese-simplified\n * U+FE3A PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET: not included in any glyphset definition\n * U+FE3B PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET: not included in any glyphset definition\n * U+FE3C PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET: not included in any glyphset definition\n * U+FE3D PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET: try adding one of: mongolian, chinese-simplified\n * U+FE3E PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET: try adding one of: mongolian, chinese-simplified\n * U+FE3F PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET: try adding chinese-simplified\n * U+FE40 PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET: try adding chinese-simplified\n * U+FE41 PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET: try adding one of: mongolian, chinese-simplified\n * U+FE42 PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET: try adding mongolian\n * U+FE43 PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET: try adding one of: mongolian, chinese-simplified\n * U+FE44 PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET: try adding mongolian\n * U+FE47 PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET: not included in any glyphset definition\n * U+FE48 PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET: not included in any glyphset definition\n * U+FF02 FULLWIDTH QUOTATION MARK: try adding one of: chinese-simplified, yi\n * U+FF07 FULLWIDTH APOSTROPHE: try adding chinese-simplified\n * U+FF0D FULLWIDTH HYPHEN-MINUS: try adding chinese-simplified\n * U+FF3C FULLWIDTH REVERSE SOLIDUS: try adding chinese-simplified\n * U+FF5E FULLWIDTH TILDE: try adding one of: chinese-simplified, yi\n * U+FF61 HALFWIDTH IDEOGRAPHIC FULL STOP: try adding yi\n * U+FF62 HALFWIDTH LEFT CORNER BRACKET: try adding yi\n * U+FF63 HALFWIDTH RIGHT CORNER BRACKET: try adding yi\n * U+FF64 HALFWIDTH IDEOGRAPHIC COMMA: try adding yi\n * U+FF65 HALFWIDTH KATAKANA MIDDLE DOT: try adding yi\n * U+FF66 HALFWIDTH KATAKANA LETTER WO: not included in any glyphset definition\n * U+FF67 HALFWIDTH KATAKANA LETTER SMALL A: not included in any glyphset definition\n * U+FF68 HALFWIDTH KATAKANA LETTER SMALL I: not included in any glyphset definition\n * U+FF69 HALFWIDTH KATAKANA LETTER SMALL U: not included in any glyphset definition\n * U+FF6A HALFWIDTH KATAKANA LETTER SMALL E: not included in any glyphset definition\n * U+FF6B HALFWIDTH KATAKANA LETTER SMALL O: not included in any glyphset definition\n * U+FF6C HALFWIDTH KATAKANA LETTER SMALL YA: not included in any glyphset definition\n * U+FF6D HALFWIDTH KATAKANA LETTER SMALL YU: not included in any glyphset definition\n * U+FF6E HALFWIDTH KATAKANA LETTER SMALL YO: not included in any glyphset definition\n * U+FF6F HALFWIDTH KATAKANA LETTER SMALL TU: not included in any glyphset definition\n * U+FF70 HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK: not included in any glyphset definition\n * U+FF71 HALFWIDTH KATAKANA LETTER A: not included in any glyphset definition\n * U+FF72 HALFWIDTH KATAKANA LETTER I: not included in any glyphset definition\n * U+FF73 HALFWIDTH KATAKANA LETTER U: not included in any glyphset definition\n * U+FF74 HALFWIDTH KATAKANA LETTER E: not included in any glyphset definition\n * U+FF75 HALFWIDTH KATAKANA LETTER O: not included in any glyphset definition\n * U+FF76 HALFWIDTH KATAKANA LETTER KA: not included in any glyphset definition\n * U+FF77 HALFWIDTH KATAKANA LETTER KI: not included in any glyphset definition\n * U+FF78 HALFWIDTH KATAKANA LETTER KU: not included in any glyphset definition\n * U+FF79 HALFWIDTH KATAKANA LETTER KE: not included in any glyphset definition\n * U+FF7A HALFWIDTH KATAKANA LETTER KO: not included in any glyphset definition\n * U+FF7B HALFWIDTH KATAKANA LETTER SA: not included in any glyphset definition\n * U+FF7C HALFWIDTH KATAKANA LETTER SI: not included in any glyphset definition\n * U+FF7D HALFWIDTH KATAKANA LETTER SU: not included in any glyphset definition\n * U+FF7E HALFWIDTH KATAKANA LETTER SE: not included in any glyphset definition\n * U+FF7F HALFWIDTH KATAKANA LETTER SO: not included in any glyphset definition\n * U+FF80 HALFWIDTH KATAKANA LETTER TA: not included in any glyphset definition\n * U+FF81 HALFWIDTH KATAKANA LETTER TI: not included in any glyphset definition\n * U+FF82 HALFWIDTH KATAKANA LETTER TU: not included in any glyphset definition\n * U+FF83 HALFWIDTH KATAKANA LETTER TE: not included in any glyphset definition\n * U+FF84 HALFWIDTH KATAKANA LETTER TO: not included in any glyphset definition\n * U+FF85 HALFWIDTH KATAKANA LETTER NA: not included in any glyphset definition\n * U+FF86 HALFWIDTH KATAKANA LETTER NI: not included in any glyphset definition\n * U+FF87 HALFWIDTH KATAKANA LETTER NU: not included in any glyphset definition\n * U+FF88 HALFWIDTH KATAKANA LETTER NE: not included in any glyphset definition\n * U+FF89 HALFWIDTH KATAKANA LETTER NO: not included in any glyphset definition\n * U+FF8A HALFWIDTH KATAKANA LETTER HA: not included in any glyphset definition\n * U+FF8B HALFWIDTH KATAKANA LETTER HI: not included in any glyphset definition\n * U+FF8C HALFWIDTH KATAKANA LETTER HU: not included in any glyphset definition\n * U+FF8D HALFWIDTH KATAKANA LETTER HE: not included in any glyphset definition\n * U+FF8E HALFWIDTH KATAKANA LETTER HO: not included in any glyphset definition\n * U+FF8F HALFWIDTH KATAKANA LETTER MA: not included in any glyphset definition\n * U+FF90 HALFWIDTH KATAKANA LETTER MI: not included in any glyphset definition\n * U+FF91 HALFWIDTH KATAKANA LETTER MU: not included in any glyphset definition\n * U+FF92 HALFWIDTH KATAKANA LETTER ME: not included in any glyphset definition\n * U+FF93 HALFWIDTH KATAKANA LETTER MO: not included in any glyphset definition\n * U+FF94 HALFWIDTH KATAKANA LETTER YA: not included in any glyphset definition\n * U+FF95 HALFWIDTH KATAKANA LETTER YU: not included in any glyphset definition\n * U+FF96 HALFWIDTH KATAKANA LETTER YO: not included in any glyphset definition\n * U+FF97 HALFWIDTH KATAKANA LETTER RA: not included in any glyphset definition\n * U+FF98 HALFWIDTH KATAKANA LETTER RI: not included in any glyphset definition\n * U+FF99 HALFWIDTH KATAKANA LETTER RU: not included in any glyphset definition\n * U+FF9A HALFWIDTH KATAKANA LETTER RE: not included in any glyphset definition\n * U+FF9B HALFWIDTH KATAKANA LETTER RO: not included in any glyphset definition\n * U+FF9C HALFWIDTH KATAKANA LETTER WA: not included in any glyphset definition\n * U+FF9D HALFWIDTH KATAKANA LETTER N: not included in any glyphset definition\n * U+FF9E HALFWIDTH KATAKANA VOICED SOUND MARK: not included in any glyphset definition\n * U+FF9F HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK: not included in any glyphset definition\n * U+FFE0 FULLWIDTH CENT SIGN: try adding chinese-simplified\n * U+FFE1 FULLWIDTH POUND SIGN: try adding chinese-simplified\n * U+FFE2 FULLWIDTH NOT SIGN: not included in any glyphset definition\n * U+FFE4 FULLWIDTH BROKEN BAR: not included in any glyphset definition\n * U+FFE8 HALFWIDTH FORMS LIGHT VERTICAL: not included in any glyphset definition\n * U+1F100 DIGIT ZERO FULL STOP: try adding symbols\n * U+20B9F CJK UNIFIED IDEOGRAPH-20B9F: not included in any glyphset definition\n * U+21A1A CJK UNIFIED IDEOGRAPH-21A1A: not included in any glyphset definition\n * U+243D0 CJK UNIFIED IDEOGRAPH-243D0: not included in any glyphset definition\n * U+25874 CJK UNIFIED IDEOGRAPH-25874: not included in any glyphset definition\n * U+28CDD CJK UNIFIED IDEOGRAPH-28CDD: not included in any glyphset definition\n * U+28EF6 CJK UNIFIED IDEOGRAPH-28EF6: not included in any glyphset definition\n * U+2F80F CJK COMPATIBILITY IDEOGRAPH-2F80F: not included in any glyphset definition\n * U+2F884 CJK COMPATIBILITY IDEOGRAPH-2F884: not included in any glyphset definition\n * U+2F8D3 CJK COMPATIBILITY IDEOGRAPH-2F8D3: not included in any glyphset definition\n * U+2F920 CJK COMPATIBILITY IDEOGRAPH-2F920: not included in any glyphset definition\n\nOr you can add the above codepoints to one of the subsets supported by the font: `cyrillic`, `japanese`, `latin`, `latin-ext`, `menu` [code: unreachable-subsetting]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check ensures that all encoded glyphs in the font are covered by a\n subset declared in the METADATA.pb. Google Fonts splits the font into\n a set of subset fonts based on the contents of the `subsets` field and\n the subset definitions in the `glyphsets` repository.\n\n Any encoded glyphs which are not by any of these subset definitions\n will not be served in the subsetted fonts, and so will be unreachable to\n the end user.\n ", + "result": "WARN", + "severity": 2 + }, + { + "description": "Substitute copyright, registered and trademark symbols in name table entries.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No need to substitute copyright, registered and trademark symbols in name table entries of this font.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check the OS/2 usWeightClass is appropriate for the font's best SubFamily name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts expects variable fonts, static ttfs and static otfs to have\n differing OS/2 usWeightClass values.\n\n - For Variable Fonts, Thin-Black must be 100-900\n\n - For static ttfs, Thin-Black can be 100-900 or 250-900\n\n - For static otfs, Thin-Black must be 250-900\n\n If static otfs are set lower than 250, text may appear blurry in\n legacy Windows applications.\n\n Glyphsapp users can change the usWeightClass value of an instance by adding\n a 'weightClass' customParameter.\n ", + "result": "PASS" + }, + { + "description": "Check font has a license.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Found license at '/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/OFL.txt'", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check license file has good copyright string.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "looks good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n An OFL.txt file's first line should be the font copyright e.g:\n \"Copyright 2019 The Montserrat Project Authors\n (https://github.com/julietaula/montserrat)\"\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Check OFL body text is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The OFL.txt body text is incorrect. Please use https://github.com/googlefonts/Unified-Font-Repository/blob/main/OFL.txt as a template. You should only modify the first line. [code: incorrect-ofl-body-text]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Check OFL body text is correct.\n Often users will accidently delete parts of the body text.\n ", + "result": "FAIL", + "severity": 10 + }, + { + "description": "Check copyright namerecords match license file.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Licensing entry on name table is correctly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A known licensing description must be provided in the NameID 14\n (LICENSE DESCRIPTION) entries of the name table.\n\n The source of truth for this check (to determine which license is in use) is\n a file placed side-by-side to your font project including the licensing terms.\n\n Depending on the chosen license, one of the following string snippets is\n expected to be found on the NameID 13 (LICENSE DESCRIPTION) entries of the\n name table:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set\n of legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "PASS" + }, + { + "description": "License URL matches License text on name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has a valid license URL in NAME table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A known license URL must be provided in the NameID 14 (LICENSE INFO URL)\n entry of the name table.\n\n The source of truth for this check is the licensing text found on the NameID 13\n entry (LICENSE DESCRIPTION).\n\n The string snippets used for detecting licensing terms are:\n\n - \"This Font Software is licensed under the SIL Open Font License, Version 1.1.\n This license is available with a FAQ at: https://scripts.sil.org/OFL\"\n\n - \"Licensed under the Apache License, Version 2.0\"\n\n - \"Licensed under the Ubuntu Font Licence 1.0.\"\n\n\n Currently accepted licenses are Apache or Open Font License. For a small set of\n legacy families the Ubuntu Font License may be acceptable as well.\n\n When in doubt, please choose OFL for new font projects.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not exceed 200 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All description name records have reasonably small lengths.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n An old FontLab version had a bug which caused it to store copyright notices\n in nameID 10 entries.\n\n In order to detect those and distinguish them from actual legitimate usage of\n this name table entry, we expect that such strings do not exceed a reasonable\n length of 200 chars.\n\n Longer strings are likely instances of the FontLab bug.\n ", + "result": "PASS" + }, + { + "description": "Show hinting filesize impact.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Hinting filesize impact:\n\n | | /home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf |\n |:------------- | ---------------:|\n | Dehinted Size | 8.0Mb |\n | Hinted Size | 8.0Mb |\n | Increase | 0 bytes |\n | Change | 0.0 % |\n [code: size-impact]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This check is merely informative, displaying and useful comparison of filesizes\n of hinted versus unhinted font files.\n ", + "result": "INFO" + }, + { + "description": "Ensure files are not too large.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font file is 8.0Mb; ideally it should be less than 1.0Mb [code: large-font]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Serving extremely large font files on Google Fonts causes usability issues.\n This check ensures that file sizes are reasonable.\n ", + "result": "WARN", + "severity": 10 + }, + { + "description": "Version format is correct in 'name' table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Version format in NAME table entries is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has ttfautohint params?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font appears to our heuristic as not hinted using ttfautohint. [code: not-hinted]", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "Font has old ttfautohint applied?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Could not detect which version of ttfautohint was used in this font. It is typically specified as a comment in the font version entries of the 'name' table. Such font version strings are currently: ['Version 3.002'] [code: version-not-detected]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n Check if font has been hinted with an outdated version of ttfautohint.\n ", + "result": "INFO" + }, + { + "description": "EPAR table present in font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "EPAR table not present in font. To learn more see https://github.com/fonttools/fontbakery/issues/818 [code: lacks-EPAR]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The EPAR table is/was a way of expressing common licensing permissions and\n restrictions in metadata; while almost nothing supported it, Dave Crossland\n wonders that adding it to everything in Google Fonts could help make it\n more popular.\n\n More info is available at:\n https://davelab6.github.io/epar/\n ", + "result": "INFO", + "severity": 1 + }, + { + "description": "Is the Grid-fitting and Scan-conversion Procedure ('gasp') table set to optimize rendering?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "These are the ppm ranges declared on the gasp table:\n\nPPM <= 65535:\n\tflag = 0x0A\n\t- Use grayscale rendering\n\t- Use smoothing along multiple axes with ClearType\u00ae\n [code: ranges]", + "status": "INFO", + "traceback": null + }, + { + "message": "The gasp range 0xFFFF value 0x0A should be set to 0x0F. [code: unset-flags]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Traditionally version 0 'gasp' tables were set so that font sizes below 8 ppem\n had no grid fitting but did have antialiasing. From 9-16 ppem, just grid\n fitting.\n And fonts above 17ppem had both antialiasing and grid fitting toggled on.\n The use of accelerated graphics cards and higher resolution screens make this\n approach obsolete. Microsoft's DirectWrite pushed this even further with much\n improved rendering built into the OS and apps.\n\n In this scenario it makes sense to simply toggle all 4 flags ON for all font\n sizes.\n ", + "result": "WARN" + }, + { + "description": "Make sure family name does not begin with a digit.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font family name first character is not a digit.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Font family names which start with a numeral are often not discoverable\n in Windows applications.\n ", + "result": "PASS" + }, + { + "description": "Are there non-ASCII characters in ASCII-only NAME table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "None of the ASCII-only NAME table entries contain non-ASCII characteres.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType spec requires ASCII for the POSTSCRIPT_NAME (nameID 6).\n\n For COPYRIGHT_NOTICE (nameID 0) ASCII is required because that string should be\n the same in CFF fonts which also have this requirement in the OpenType spec.\n\n Note:\n A common place where we find non-ASCII strings is on name table entries\n with NameID > 18, which are expressly for localising the ASCII-only IDs\n into Hindi / Arabic / etc.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only has unique \"full_name\" values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique \"full_name\" values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: check if fonts field only contains unique style:weight pairs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb \"fonts\" field only has unique style:weight pairs.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb license is \"APACHE2\", \"UFL\" or \"OFL\"?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font license is declared in METADATA.pb as \"OFL\"", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb should contain at least \"menu\" and \"latin\" subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb contains \"menu\" and \"latin\" subsets.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb subsets should be alphabetically ordered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb subsets are sorted in alphabetical order.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb includes production subsets.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No missing subsets", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb file includes the same subsets as the family in production.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice is the same in all fonts?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright is consistent across family", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that METADATA.pb family values are all the same.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: Family name is the same in all metadata \"fonts\" items.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: According to Google Fonts standards, families should have a Regular style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Family has a Regular style.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Regular should be 400.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Regular has weight = 400.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.name field matches family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Family name \"Yuji Syuku\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checks METADATA.pb font.post_script_name matches postscript name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Postscript name \"YujiSyuku-Regular\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name value matches fullname declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font fullname \"Yuji Syuku Regular\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name value should be same as the family name declared on the name table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK: Family name \"Yuji Syuku\" is identical in METADATA.pb and on the TTF file.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This check ensures consistency between the font name declared on the name table\n and the contents of the METADATA.pb file.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name and font.post_script_name fields have equivalent values ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"full_name\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename and font.post_script_name fields have equivalent values?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font fields \"filename\" and \"post_script_name\" have equivalent values.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.name field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.full_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.full_name field contains font name in right format. (\"Yuji Syuku\" in \"Yuji Syuku Regular\")", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.filename field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb filename field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.post_script_name field contains font name in right format?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb postScriptName field contains font name in right format.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check name ID 25 to end with \"Italic\" for Italic VFs.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Not an Italic VF.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Due to a bug in (at least) Adobe Indesign, name ID 25\n needs to be different for Italic VFs than their Upright counterparts.\n Google Fonts chooses to append \"Italic\" here.\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in METADATA.pb", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb copyright string is good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The expected pattern for the copyright string adheres to the following rules:\n\n * It must say \"Copyright\" followed by a 4 digit year (optionally followed by\n a hyphen and another 4 digit year)\n\n * Then it must say \"The Project Authors\"\n\n * And within parentheses, a URL for a git repository must be provided\n\n * The check is case insensitive and does not validate whether the familyname\n is correct, even though we'd expect it is (and we may soon update the check\n to validate that aspect as well!)\n\n\n Here is an example of a valid copyright string:\n\n \"Copyright 2017 The Archivo Black Project Authors\n (https://github.com/Omnibus-Type/ArchivoBlack)\"\n ", + "result": "PASS" + }, + { + "description": "Copyright notices match canonical pattern in fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Name Table entry: Copyright field 'Copyright 2021 The Yuji Project Authors (https://github.com/Kinutafontfactory/Yuji)' matches canonical pattern.", + "status": "PASS", + "traceback": null + }, + { + "message": "Name table copyright entries are good", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Copyright notice on METADATA.pb should not contain 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb copyright field does not contain \"Reserved Font Name\".", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Copyright notice shouldn't exceed 500 chars.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright notice string is shorter than 500 chars.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font filenames match font.filename entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Filenames in METADATA.pb look good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Note:\n This check only looks for files in the current directory.\n\n Font files in subdirectories are checked by these other two checks:\n - com.google.fonts/check/metadata/undeclared_fonts\n - com.google.fonts/check/repo/vf_has_static_fonts\n\n We may want to merge them all into a single check.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb font.style \"italic\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This check only applies to italic fonts.", + "status": "SKIP", + "traceback": null + } + ], + "result": "SKIP" + }, + { + "description": "METADATA.pb font.style \"normal\" matches font internals?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb font.style \"normal\" matches font internals.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb font.name and font.full_name fields match the values declared on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb familyname and fullName fields match corresponding name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check font name is the same as family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font name is the same as family name.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check that font weight has a canonical value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font weight has a canonical value.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check METADATA.pb font weights are correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 usWeightClass or wght axis value matches weight specified at METADATA.pb", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check METADATA.pb font weights are correct.\n\n For static fonts, the metadata weight should be the same as the static font's\n OS/2 usWeightClass.\n\n For variable fonts, the weight value should be 400 if the font's wght axis range\n includes 400, otherwise it should be the value closest to 400.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb weight matches postScriptName for static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Weight value matches postScriptName.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Font styles are named canonically?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font styles are named canonically.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "METADATA.pb: Check URL on copyright string is the same as in repository_url field.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Value of repository_url field is \n\nBut font copyright string has: https://github.com/Kinutafontfactory/Yuji\n [code: mismatch]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n Sometimes, perhaps due to copy-pasting, projects may declare different URLs\n between the font.coyright and the family.sources.repository_url fields.\n ", + "result": "FAIL" + }, + { + "description": "METADATA.pb: Check for primary_script", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "METADATA.pb: primary_script field should be 'Hani' but is missing.\nMake sure that 'Hani' is actually the correct one (out of Jpan, Hani, Hant, Hans). [code: missing-primary-script]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Try to guess font's primary script and see if that's set in METADATA.pb.\n This is an educated guess based on the number of glyphs per script in the font\n and should be taken with caution.\n ", + "result": "WARN" + }, + { + "description": "Stricter unitsPerEm criteria for Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font em size is good (unitsPerEm = 1000).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though the OpenType spec allows unitsPerEm to be any value between 16\n and 16384, the Google Fonts project aims at a narrower set of reasonable values.\n\n The spec suggests usage of powers of two in order to get some performance\n improvements on legacy renderers, so those values are acceptable.\n\n But values of 500 or 1000 are also acceptable, with the added benefit that it\n makes upm math easier for designers, while the performance hit of not using a\n power of two is most likely negligible nowadays.\n\n Additionally, values above 2048 would likely result in unreasonable\n filesize increases.\n ", + "result": "PASS" + }, + { + "description": "Glyphs are similiar to Google Fonts version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs are similar in comparison to the Google Fonts version.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking direction of slnt axis angles", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'slnt' axis values are defined as negative values for a clockwise (right)\n lean, and positive values for counter-clockwise lean. This is counter-intuitive\n for many designers who are used to think of a positive slant as a lean to\n the right.\n\n This check ensures that the slant axis direction is consistent with the specs.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt\n ", + "result": "SKIP" + }, + { + "description": "Check font names are correct", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font names are good:\n\n| nameID | current | expected |\n| :--- | :--- | :--- |\n| Family Name | Yuji Syuku | Yuji Syuku |\n| Subfamily Name | Regular | Regular |\n| Full Name | Yuji Syuku Regular | Yuji Syuku Regular |\n| Poscript Name | YujiSyuku-Regular | YujiSyuku-Regular |", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has several rules which need to be adhered to when\n setting a font's name table. Please read:\n https://googlefonts.github.io/gf-guide/statics.html#supported-styles\n https://googlefonts.github.io/gf-guide/statics.html#style-linking\n https://googlefonts.github.io/gf-guide/statics.html#unsupported-styles\n https://googlefonts.github.io/gf-guide/statics.html#single-weight-families\n ", + "result": "PASS" + }, + { + "description": "Copyright field for this font on METADATA.pb matches all copyright notice entries on the name table ?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Copyright field for this font on METADATA.pb matches copyright notice entries on the name table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has all mandatory 'name' table entries?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font contains values for all mandatory name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Length of copyright notice must not exceed 500 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All copyright notice name entries on the 'name' table are shorter than 500 characters.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n This is an arbitrary max length for the copyright notice field of the name\n table. We simply don't want such notices to be too long. Typically such notices\n are actually much shorter than this with a length of roughly 70 or 80\n characters.\n ", + "result": "PASS" + }, + { + "description": "Check for font-v versioning.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Version string is: \"Version 3.002\"\nThe version string must ideally include a git commit hash and either a \"dev\" or a \"release\" suffix such as in the example below:\n\"Version 1.3; git-0d08353-release\" [code: bad-format]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n The git sha1 tagging and dev/release features of Source Foundry `font-v` tool\n are awesome and we would love to consider upstreaming the approach into\n fontmake someday. For now we only emit an INFO if a given font does not yet\n follow the experimental versioning style, but at some point we may start\n enforcing it.\n ", + "result": "INFO" + }, + { + "description": "Check glyphs do not have components which are themselves components.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain nested components.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been bugs rendering variable fonts with nested components.\n Additionally, some static fonts with nested components have been reported\n to have rendering and printing issues.\n\n For more info, see:\n * https://github.com/fonttools/fontbakery/issues/2961\n * https://github.com/arrowtype/recursive/issues/412\n ", + "result": "PASS" + }, + { + "description": "Check a static ttf can be generated from a variable font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Google Fonts may serve static fonts which have been generated from variable\n fonts. This test will attempt to generate a static ttf using fontTool's\n varLib mutator.\n\n The target font will be the mean of each axis e.g:\n\n ## VF font axes\n\n - min weight, max weight = 400, 800\n\n - min width, max width = 50, 100\n\n ## Target Instance\n\n - weight = 600\n\n - width = 75\n ", + "result": "SKIP" + }, + { + "description": "Check that variable fonts have an HVAR table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Not having a HVAR table can lead to costly text-layout operations on some\n platforms, which we want to avoid.\n\n So, all variable fonts on the Google Fonts collection should have an HVAR\n with valid values.\n\n More info on the HVAR table can be found at:\n https://docs.microsoft.com/en-us/typography/opentype/spec/otvaroverview#variation-data-tables-and-miscellaneous-requirements\n ", + "result": "SKIP" + }, + { + "description": "Font enables smart dropout control in \"prep\" table instructions?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "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]", + "status": "FAIL", + "traceback": null + } + ], + "rationale": "\n This setup is meant to ensure consistent rendering quality for fonts across\n all devices (with different rendering/hinting capabilities).\n\n Below is the snippet of instructions we expect to see in the fonts:\n B8 01 FF PUSHW 0x01FF\n 85 SCANCTRL (unconditinally turn on\n dropout control mode)\n B0 04 PUSHB 0x04\n 8D SCANTYPE (enable smart dropout control)\n\n \"Smart dropout control\" means activating rules 1, 2 and 5:\n Rule 1: If a pixel's center falls within the glyph outline,\n that pixel is turned on.\n Rule 2: If a contour falls exactly on a pixel's center,\n that pixel is turned on.\n Rule 5: If a scan line between two adjacent pixel centers\n (either vertical or horizontal) is intersected\n by both an on-Transition contour and an off-Transition\n contour and neither of the pixels was already turned on\n by rules 1 and 2, turn on the pixel which is closer to\n the midpoint between the on-Transition contour and\n off-Transition contour. This is \"Smart\" dropout control.\n\n For more detailed info (such as other rules not enabled in this snippet),\n please refer to the TrueType Instruction Set documentation.\n ", + "result": "FAIL" + }, + { + "description": "There must not be VTT Talk sources in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no tables with VTT Talk sources embedded in the font.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The goal here is to reduce filesizes and improve pageloading when dealing\n with webfonts.\n\n The VTT Talk sources are not necessary at runtime and endup being just dead\n weight when left embedded in the font binaries. The sources should be kept on\n the project files but stripped out when building release binaries.\n ", + "result": "PASS" + }, + { + "description": "Are there unwanted Apple tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted AAT tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Apple's TrueType reference manual [1] describes SFNT tables not in the\n Microsoft OpenType specification [2] and these can sometimes sneak into final\n release files, but Google Fonts should only have OpenType tables.\n\n [1] https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html\n [2] https://docs.microsoft.com/en-us/typography/opentype/spec/\n ", + "result": "PASS" + }, + { + "description": "Check a font's STAT table contains compulsory Axis Values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's STAT table contains compulsory Axis Values which exist\n in the Google Fonts Axis Registry.\n\n We cannot determine what Axis Values the user will set for axes such as\n opsz, GRAD since these axes are unique for each font so we'll skip them.\n ", + "result": "SKIP" + }, + { + "description": "Check variable font instances", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check a font's fvar instance coordinates comply with our guidelines:\n https://googlefonts.github.io/gf-guide/variable.html#fvar-instances\n ", + "result": "SKIP" + }, + { + "description": "All name entries referenced by fvar instances exist on the name table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The purpose of this check is to make sure that all name entries referenced\n by variable font instances do exist in the name table.\n ", + "result": "SKIP" + }, + { + "description": "PPEM must be an integer on hinted fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_hinted", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Hinted fonts must have head table flag bit 3 set.\n\n Per https://docs.microsoft.com/en-us/typography/opentype/spec/head,\n bit 3 of Head::flags decides whether PPEM should be rounded. This bit should\n always be set for hinted fonts.\n\n Note:\n Bit 3 = Force ppem to integer values for all internal scaler math;\n May use fractional ppem sizes if this bit is clear;\n ", + "result": "SKIP" + }, + { + "description": "Are there caret positions declared for every ligature?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "GDEF table is missing, but it is mandatory to declare it on fonts that provide ligature glyphs because the caret (text cursor) positioning for each ligature must be provided in this table. [code: GDEF-missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n All ligatures in a font must have corresponding caret (text cursor) positions\n defined in the GDEF table, otherwhise, users may experience issues with\n caret rendering.\n\n If using GlyphsApp or UFOs, ligature carets can be defined as anchors with\n names starting with 'caret_'. These can be compiled with fontmake as of\n version v2.4.0.\n ", + "result": "WARN" + }, + { + "description": "Is there kerning info for non-ligated sequences?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_kerning_info", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with ligatures should have kerning on the corresponding non-ligated\n sequences for text where ligatures aren't used\n (eg https://github.com/impallari/Raleway/issues/14).\n ", + "result": "SKIP" + }, + { + "description": "Combined length of family and style must not exceed 27 characters.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All name entries are good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to a GlyphsApp tutorial [1], in order to make sure all versions of\n Windows recognize it as a valid font file, we must make sure that the\n concatenated length of the familyname (NameID.FONT_FAMILY_NAME) and\n style (NameID.FONT_SUBFAMILY_NAME) strings in the name table do not\n exceed 20 characters.\n\n After discussing the problem in more detail at FontBakery issue #2179 [2] we\n decided that allowing up to 27 chars would still be on the safe side, though.\n\n [1] https://glyphsapp.com/tutorials/multiple-masters-part-3-setting-up-instances\n [2] https://github.com/fonttools/fontbakery/issues/2179\n ", + "result": "PASS" + }, + { + "description": "Name table entries should not contain line-breaks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Name table entries are all single-line (no line-breaks found).", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are some entries on the name table that may include more than one line\n of text. The Google Fonts team, though, prefers to keep the name table entries\n short and simple without line breaks.\n\n For instance, some designers like to include the full text of a font license in\n the \"copyright notice\" entry, but for the GFonts collection this entry should\n only mention year, author and other basic info in a manner enforced by\n com.google.fonts/check/font_copyright\n ", + "result": "PASS" + }, + { + "description": "Name table strings must not contain the string 'Reserved Font Name'.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "None of the name table strings contain \"Reserved Font Name\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some designers adopt the \"Reserved Font Name\" clause of the OFL license. This\n means that the original author reserves the rights to the family name and other\n people can only distribute modified versions using a different family name.\n\n Google Fonts published updates to the fonts in the collection in order to fix\n issues and/or implement further improvements to the fonts. It is important to\n keep the family name so that users of the webfonts can benefit from the updates.\n Since it would forbid such usage scenario, all families in the GFonts collection\n are required to not adopt the RFN clause.\n\n This check ensures \"Reserved Font Name\" is not mentioned in the name table.\n ", + "result": "PASS" + }, + { + "description": "Check family name for GF Guide compliance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font name looks good.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks the family name for compliance with the Google Fonts Guide.\n https://googlefonts.github.io/gf-guide/onboarding.html#new-fonts\n\n If you want to have your family name added to the CamelCase\n exceptions list, please submit a pull request to the\n camelcased_familyname_exceptions.txt file.\n\n Similarly, abbreviations can be submitted to the\n abbreviations_familyname_exceptions.txt file.\n\n These are located in the Lib/fontbakery/data/googlefonts/ directory\n of the FontBakery source code currently hosted at\n https://github.com/fonttools/fontbakery/\n ", + "result": "PASS" + }, + { + "description": "Directory name in GFonts repo structure must match NameID 1 of the regular.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "A static fonts directory with at least two fonts must accompany variable fonts", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Please consider adding a subdirectory called \"static/\" and including in it static font files. [code: missing]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Variable font family directories kept in the google/fonts git repo may include\n a static/ subdir containing static fonts.\n\n These files are meant to be served for users that still lack support for\n variable fonts in their web browsers.\n ", + "result": "WARN" + }, + { + "description": "A font repository should not include FontBakery report files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A FontBakery report is ephemeral and so should be used for posting issues on a\n bug-tracker instead of being hosted in the font project repository.\n ", + "result": "PASS" + }, + { + "description": "Check upstream.yaml file contains all required fields", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The upstream.yaml file contains all necessary fields", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If a family has been pushed using the gftools packager, we must check that all\n the required fields in the upstream.yaml file have been populated.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "A font repository should not include ZIP files", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes people check in ZIPs into their font project repositories. While we\n accept the practice of checking in binaries, we believe that a ZIP is a step\n too far ;)\n\n Note: a source purist position is that only source files and build scripts\n should be checked in.\n ", + "result": "PASS" + }, + { + "description": "Check font follows the Google Fonts vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles, not is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check generally enforces Google Fonts\u2019 vertical metrics specifications.\n In particular:\n * lineGap must be 0\n * Sum of hhea ascender + abs(descender) + linegap must be\n between 120% and 200% of UPM\n * Warning if sum is over 150% of UPM\n\n The threshold levels 150% (WARN) and 200% (FAIL) are somewhat arbitrarily chosen\n and may hint at a glaring mistake in the metrics calculations or UPM settings.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/VerticalMetrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n If the family already exists on Google Fonts, we need to ensure that the\n checked family's vertical metrics are similar. This check will test the\n following schema which was outlined in Font Bakery issue #1162 [1]:\n\n - The family should visually have the same vertical metrics as the Regular\n style hosted on Google Fonts.\n\n - If the family on Google Fonts has differing hhea and typo metrics, the family\n being checked should use the typo metrics for both the hhea and typo entries.\n\n - If the family on Google Fonts has use typo metrics not enabled and the family\n being checked has it enabled, the hhea and typo metrics should use the family\n on Google Fonts winAscent and winDescent values.\n\n - If the upms differ, the values must be scaled so the visual appearance is\n the same.\n\n [1] https://github.com/fonttools/fontbakery/issues/1162\n ", + "result": "SKIP" + }, + { + "description": "Check font follows the Google Fonts CJK vertical metric schema", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not remote_styles", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n CJK fonts have different vertical metrics when compared to Latin fonts.\n We follow the schema developed by dr Ken Lunde for Source Han Sans and\n the Noto CJK fonts.\n\n Our documentation includes further information:\n https://github.com/googlefonts/gf-docs/tree/main/Spec#cjk-vertical-metrics\n ", + "result": "SKIP" + }, + { + "description": "Check if the vertical metrics of a CJK family are similar to the same family hosted on Google Fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "CJK vertical metrics are good", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check CJK family has the same vertical metrics as the same family\n hosted on Google Fonts.\n ", + "result": "PASS" + }, + { + "description": "Does the font contain less than 150 CJK characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct quantity of CJK glyphs", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Kana has 150 characters and it's the smallest CJK writing system.\n\n If a font contains less CJK glyphs than this writing system, we inform the\n user that some glyphs may be encoded incorrectly.\n ", + "result": "PASS" + }, + { + "description": "Check variable font instances don't have duplicate names", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check's purpose is to detect duplicate named instances names in a\n given variable font.\n Repeating instance names may be the result of instances for several VF axes\n defined in `fvar`, but since currently only weight+italic tokens are allowed\n in instance names as per GF specs, they ended up repeating.\n Instead, only a base set of fonts for the most default representation of the\n family can be defined through instances in the `fvar` table, all other\n instances will have to be left to access through the `STAT` table.\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs do not contain the ital axis.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'ital' axis is not supported yet in Google Chrome.\n\n For the time being, we need to ensure that VFs do not contain this axis.\n Once browser support is better, we can deprecate this check.\n\n For more info regarding browser support, see:\n https://arrowtype.github.io/vf-slnt-test/\n ", + "result": "SKIP" + }, + { + "description": "Ensure VFs with duplexed axes do not vary horizontal advance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Certain axes, such as grade (GRAD) or roundness (ROND), should not\n change any advanceWidth or kerning data across the font's design space.\n This is because altering the advance width of glyphs can cause text reflow.\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes values are within gf_axisregistry bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Each axis range in a METADATA.pb file must be registered, and within the bounds\n of the axis definition in the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate METADATA.pb axes tags are defined in gf_axisregistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Ensure all axes in a METADATA.pb file are registered in the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n Why does Google Fonts have its own Axis Registry?\n\n We support a superset of the OpenType axis registry axis set, and use\n additional metadata for each axis. Axes present in a font file but not in this\n registry will not function via our API. No variable font is expected to\n support all of the axes here.\n\n Any font foundry or distributor library that offers variable fonts has a\n implicit, latent, de-facto axis registry, which can be extracted by scanning\n the library for axes' tags, labels, and min/def/max values. While in 2016\n Microsoft originally offered to include more axes in the OpenType 1.8\n specification (github.com/microsoft/OpenTypeDesignVariationAxisTags), as of\n August 2020, this effort has stalled. We hope more foundries and distributors\n will publish documents like this that make their axes explicit, to encourage\n of adoption of variable fonts throughout the industry, and provide source\n material for a future update to the OpenType specification's axis registry.\n ", + "result": "SKIP" + }, + { + "description": "Validate defaults on fvar table match registered fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that axis defaults have a corresponding fallback name registered at the\n Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n\n This is necessary for the following reasons:\n\n To get ZIP files downloads on Google Fonts to be accurate \u2014 otherwise the\n chosen default font is not generated. The Newsreader family, for instance, has\n a default value on the 'opsz' axis of 16pt. If 16pt was not a registered\n fallback position, then the ZIP file would instead include another position\n as default (such as 14pt).\n\n For the Variable fonts to display the correct location on the specimen page.\n\n For VF with no weight axis to be displayed at all. For instance, Ballet, which\n has no weight axis, was not appearing in sandbox because default position on\n 'opsz' axis was 16pt, and it was not yet a registered fallback positon.\n ", + "result": "SKIP" + }, + { + "description": "Validate STAT particle names and values match the fallback names in GFAxisRegistry.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that particle names and values on STAT table match the fallback names\n in each axis entry at the Google Fonts Axis Registry, available at\n https://github.com/google/fonts/tree/main/axisregistry\n ", + "result": "SKIP" + }, + { + "description": "Validate VF axes match the ones declared on METADATA.pb.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All font variation axes present in the font files must be properly declared\n on METADATA.pb so that they can be served by the GFonts API.\n ", + "result": "SKIP" + }, + { + "description": "Ensure METADATA.pb does not use escaped strings.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In some cases we've seen designer names and other fields with escaped strings\n in METADATA files. Nowadays the strings can be full unicode strings and\n do not need escaping.\n ", + "result": "PASS" + }, + { + "description": "METADATA.pb: Designers are listed correctly on the Google Fonts catalog?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Google Fonts has a catalog of designers.\n\n This check ensures that the online entries of the catalog can be found based\n on the designer names listed on the METADATA.pb file.\n\n It also validates the URLs and file formats are all correctly set.\n ", + "result": "PASS" + }, + { + "description": "Ensure variable fonts include an avar table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Most variable fonts should include an avar table to correctly define\n axes progression rates.\n\n For example, a weight axis from 0% to 100% doesn't map directly to 100 to 1000,\n because a 10% progression from 0% may be too much to define the 200,\n while 90% may be too little to define the 900.\n\n If the progression rates of axes is linear, this check can be ignored.\n Fontmake will also skip adding an avar table if the progression rates\n are linear. However, we still recommend designers visually proof each\n instance is at the expected weight, width etc.\n ", + "result": "SKIP" + }, + { + "description": "On a family update, the DESCRIPTION.en_us.html file should ideally also be updated.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The DESCRIPTION.en_us.html file in this family has not changed in comparison to the latest font release on the google/fonts github repo.\nPlease consider mentioning note-worthy improvements made to the family recently. [code: description-not-updated]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n We want to ensure that any significant changes to the font family are\n properly mentioned in the DESCRIPTION file.\n\n In general, it means that the contents of the DESCRIPTION.en_us.html file\n will typically change if when font files are updated. Please treat this check\n as a reminder to do so whenever appropriate!\n ", + "result": "WARN" + }, + { + "description": "Check small caps glyphs are available.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Ensure small caps glyphs are available if\n a font declares smcp or c2sc OT features.\n ", + "result": "PASS" + }, + { + "description": "Ensure Stylistic Sets have description.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Stylistic sets should provide description text. Programs such as InDesign,\n TextEdit and Inkscape use that info to display to the users so that they know\n what a given stylistic set offers.\n ", + "result": "PASS" + }, + { + "description": "OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n All fonts on the Google Fonts collection should have OS/2.fsSelection bit 7\n (USE_TYPO_METRICS) set. This requirement is part of the vertical metrics scheme\n established as a Google Fonts policy aiming at a common ground supported by\n all major font rendering environments.\n\n For more details, read:\n https://github.com/googlefonts/gf-docs/blob/main/VerticalMetrics/README.md\n\n Below is the portion of that document that is most relevant to this check:\n\n Use_Typo_Metrics must be enabled. This will force MS Applications to use the\n OS/2 Typo values instead of the Win values. By doing this, we can freely set\n the Win values to avoid clipping and control the line height with the typo\n values. It has the added benefit of future line height compatibility. When\n a new script is added, we simply change the Win values to the new yMin\n and yMax, without needing to worry if the line height have changed.\n ", + "result": "SKIP", + "severity": 10 + }, + { + "description": "Ensure fonts have ScriptLangTags declared on the 'meta' table.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font file does not have a 'meta' table. [code: lacks-meta-table]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The OpenType 'meta' table originated at Apple. Microsoft added it to OT with\n just two DataMap records:\n\n - dlng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font is designed for.\n\n - slng: comma-separated ScriptLangTags that indicate which scripts,\n or languages and scripts, with possible variants, the font supports.\n\n\n The slng structure is intended to describe which languages and scripts the\n font overall supports. For example, a Traditional Chinese font that also\n contains Latin characters, can indicate Hant,Latn, showing that it supports\n Hant, the Traditional Chinese variant of the Hani script, and it also\n supports the Latn script.\n\n The dlng structure is far more interesting. A font may contain various glyphs,\n but only a particular subset of the glyphs may be truly \"leading\" in the design,\n while other glyphs may have been included for technical reasons. Such a\n Traditional Chinese font could only list Hant there, showing that it\u2019s designed\n for Traditional Chinese, but the font would omit Latn, because the developers\n don\u2019t think the font is really recommended for purely Latin-script use.\n\n The tags used in the structures can comprise just script, or also language\n and script. For example, if a font has Bulgarian Cyrillic alternates in the\n locl feature for the cyrl BGR OT languagesystem, it could also indicate in\n dlng explicitly that it supports bul-Cyrl. (Note that the scripts and languages\n in meta use the ISO language and script codes, not the OpenType ones).\n\n This check ensures that the font has the meta table containing the\n slng and dlng structures.\n\n All families in the Google Fonts collection should contain the 'meta' table.\n Windows 10 already uses it when deciding on which fonts to fall back to.\n The Google Fonts API and also other environments could use the data for\n smarter filtering. Most importantly, those entries should be added\n to the Noto fonts.\n\n In the font making process, some environments store this data in external\n files already. But the meta table provides a convenient way to store this\n inside the font file, so some tools may add the data, and unrelated tools\n may read this data. This makes the solution much more portable and universal.\n ", + "result": "WARN", + "severity": 3 + }, + { + "description": "Ensure fonts do not contain any pre-production tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Tables such as `Debg` are useful in the pre-production stages of font\n development, but add unnecessary bloat to a production font and should\n be removed before release.\n ", + "result": "PASS", + "severity": 6 + }, + { + "description": "Check font family directory name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Directory name is \"yujisyuku\", as expected.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want the directory name of a font family to be predictable and directly\n derived from the family name, all lowercased and removing spaces.\n ", + "result": "PASS" + }, + { + "description": "Check font can render its own name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font can successfully render its own name (Yuji Syuku)", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A base expectation is that a font family's regular/default (400 roman) style\n can render its 'menu name' (nameID 1) in itself.\n ", + "result": "PASS" + }, + { + "description": "Check samples can be rendered.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n In order to prevent tofu from being seen on fonts.google.com, this check\n verifies that all samples specified by METADATA.pb can be properly\n rendered by the font.\n ", + "result": "PASS" + }, + { + "description": "Check if category on METADATA.pb matches what can be inferred from the family name.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Sometimes the font familyname contains words that hint at which is the most\n likely correct category to be declared on METADATA.pb\n ", + "result": "PASS" + }, + { + "description": "Check font has the expected color font tables.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks Good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n COLR v0 fonts are widely supported in most browsers so they do not require\n an SVG color table. However, some environments (e.g. Safari, Adobe apps)\n do not currently support COLR v1 so we need to add an SVG table to these fonts,\n except in the case of variable fonts, since SVG does not support\n OpenType Variations.\n\n To automatically generate compatible SVG/COLR tables,\n run the maximum_color tool in nanoemoji:\n https://github.com/googlefonts/nanoemoji\n ", + "result": "PASS" + }, + { + "description": "Color layers should have a minimum brightness", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Layers of a COLRv0 font should not be too dark or too bright. When layer colors\n are set explicitly, they can't be changed and they may turn out illegible\n against dark or bright backgrounds.\n\n While traditional color-less fonts can be colored in design apps or CSS, a\n black color definition in a COLRv0 font actually means that that layer will be\n rendered in black regardless of the background color. This leads to text\n becoming invisible against a dark background, for instance when using a dark\n theme in a web browser or operating system.\n\n This check ensures that layer colors are at least 10% bright and at most 90%\n bright, when not already set to the current color (0xFFFF).\n ", + "result": "PASS" + }, + { + "description": "Put an empty glyph on GID 1 right after the .notdef glyph for COLRv0 fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n A rendering bug in Windows 10 paints whichever glyph is on GID 1 on top of\n some glyphs, colored or not. This only occurs for COLR version 0 fonts.\n\n Having a glyph with no contours on GID 1 is a practical workaround for that.\n\n See https://github.com/googlefonts/gftools/issues/609\n ", + "result": "PASS" + }, + { + "description": "Noto fonts must have an ARTICLE.en_us.html file", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_noto", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Noto fonts are displayed in a different way on the fonts.google.com\n web site, and so must also contain an article about them.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "FAIL": 4, + "INFO": 6, + "PASS": 93, + "SKIP": 26, + "WARN": 8 + } + }, + { + "checks": [ + { + "description": "Checking all files are in the same directory.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "All files are in the same directory.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the set of font files passed in the command line is not all in the\n same directory, then we warn the user since the tool will interpret the\n set of files as belonging to a single family (and it is unlikely that\n the user would store the files from a single family spreaded\n in several separate directories).\n ", + "result": "PASS" + }, + { + "description": "Each font in a family must have the same set of vertical metrics values.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Vertical metrics are the same across the family.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n We want all fonts within a family to have the same vertical metrics so\n their line spacing is consistent across the family.\n ", + "result": "PASS" + }, + { + "description": "Name table records must not have trailing spaces.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No trailing spaces on name table entries.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking OS/2 usWinAscent & usWinDescent.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n A font's winAscent and winDescent values should be greater than or equal to\n the head table's yMax, abs(yMin) values. If they are less than these values,\n clipping can occur on Windows platforms\n (https://github.com/RedHatBrand/Overpass/issues/33).\n\n If the font includes tall/deep writing systems such as Arabic or Devanagari,\n the winAscent and winDescent can be greater than the yMax and absolute yMin\n values to accommodate vowel marks.\n\n When the 'win' Metrics are significantly greater than the UPM, the linespacing\n can appear too loose. To counteract this, enabling the OS/2 fsSelection\n bit 7 (Use_Typo_Metrics), will force Windows to use the OS/2 'typo' values\n instead. This means the font developer can control the linespacing with\n the 'typo' values, whilst avoiding clipping by setting the 'win' values to\n values greater than the yMax and absolute yMin.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 Metrics match hhea Metrics.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: not is_cjk_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n OS/2 and hhea vertical metric values should match. This will produce the\n same linespacing on Mac, GNU+Linux and Windows.\n\n - Mac OS X uses the hhea values.\n - Windows uses OS/2 or Win, depending on the OS or fsSelection bit value.\n\n When OS/2 and hhea vertical metrics match, the same linespacing results on\n macOS, GNU+Linux and Windows. Note that fixing this issue in a previously\n released font may cause reflow in user documents and unhappy users.\n ", + "result": "SKIP" + }, + { + "description": "Checking with ots-sanitize.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "ots-sanitize passed this file", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Do we have the latest version of FontBakery installed?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "FontBakery is up-to-date.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Running old versions of FontBakery can lead to a poor report which may\n include false WARNs and FAILs due do bugs, as well as outdated\n quality assurance criteria.\n\n Older versions will also not report problems that are detected by new checks\n added to the tool in more recent updates.\n ", + "result": "PASS" + }, + { + "description": "Font contains '.notdef' as its first glyph?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The OpenType specification v1.8.2 recommends that the first glyph is the\n '.notdef' glyph without a codepoint assigned and with a drawing:\n\n The .notdef glyph is very important for providing the user feedback\n that a glyph is not found in the font. This glyph should not be left\n without an outline as the user will only see what looks like a space\n if a glyph is missing and not be aware of the active font\u2019s limitation.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#glyph-0-the-notdef-glyph\n\n Pre-v1.8, it was recommended that fonts should also contain 'space', 'CR'\n and '.null' glyphs. This might have been relevant for MacOS 9 applications.\n ", + "result": "PASS" + }, + { + "description": "Font contains glyphs for whitespace characters?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font contains glyphs for whitespace characters.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font has **proper** whitespace glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyph 0x00A0 is called \"nbspace\": Change to \"uni00A0\" [code: not-recommended-00a0]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n This check enforces adherence to recommended whitespace\n (codepoints 0020 and 00A0) glyph names according to the Adobe Glyph List.\n ", + "result": "WARN" + }, + { + "description": "Whitespace glyphs have ink?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There is no whitespace glyph with ink.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font contains all required tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font contains the following optional tables:\n\n\t- loca\n\n\t- BASE\n\n\t- GSUB\n\n\t- gasp\n\n\t- vhea\n\n\t- vmtx [code: optional-tables]", + "status": "INFO", + "traceback": null + }, + { + "message": "Font contains all required tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#required-tables\n\n Whether TrueType or CFF outlines are used in an OpenType font, the following\n tables are required for the font to function correctly:\n\n - cmap (Character to glyph mapping)\u23ce\n - head (Font header)\u23ce\n - hhea (Horizontal header)\u23ce\n - hmtx (Horizontal metrics)\u23ce\n - maxp (Maximum profile)\u23ce\n - name (Naming table)\u23ce\n - OS/2 (OS/2 and Windows specific metrics)\u23ce\n - post (PostScript information)\n\n The spec also documents that variable fonts require the following table:\n\n - STAT (Style attributes)\n\n Depending on the typeface and coverage of a font, certain tables are\n recommended for optimum quality.\n\n For example:\u23ce\n - the performance of a non-linear font is improved if the VDMX, LTSH,\n and hdmx tables are present.\u23ce\n - Non-monospaced Latin fonts should have a kern table.\u23ce\n - A gasp table is necessary if a designer wants to influence the sizes\n at which grayscaling is used under Windows. Etc.\n ", + "result": "INFO" + }, + { + "description": "Are there unwanted tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There are no unwanted tables.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some font editors store source data in their own SFNT tables, and these\n can sometimes sneak into final release files, which should only have\n OpenType spec tables.\n ", + "result": "PASS" + }, + { + "description": "Check correctness of STAT table strings", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n On the STAT table, the \"Italic\" keyword must not be used on AxisValues\n for variation axes other than 'ital'.\n ", + "result": "SKIP" + }, + { + "description": "Glyph names are all valid?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The following glyph names may be too long for some legacy systems which may expect a maximum 31-characters length limit:\nblacklenticularbracketleft.half.rotat, blacklenticularbracketright.half, blacklenticularbracketright.half.rotat, blacklenticularbracketright.vert, boxDownHeavyAndHorizontalLight.half, boxDownHeavyAndHorizontalLight.half.rotat, boxDownHeavyAndLeftLight.half.rotat, boxDownHeavyAndLeftUpLight.half.rotat, boxDownHeavyAndRightLight.half.rotat, boxDownHeavyAndRightUpLight.half, boxDownHeavyAndRightUpLight.half.rotat, boxDownHeavyAndUpHorizontalLight, boxDownHeavyAndUpHorizontalLight.half, boxDownHeavyAndUpHorizontalLight.half.rotat, boxDownLightAndHorizontalHeavy.half, boxDownLightAndHorizontalHeavy.half.rotat, boxDownLightAndLeftHeavy.half.rotat, boxDownLightAndLeftUpHeavy.half.rotat, boxDownLightAndRightHeavy.half.rotat, boxDownLightAndRightUpHeavy.half, boxDownLightAndRightUpHeavy.half.rotat, boxDownLightAndUpHorizontalHeavy, boxDownLightAndUpHorizontalHeavy.half, boxDownLightAndUpHorizontalHeavy.half.rotat, boxHeavyDownAndHorizontal.half.rotat, boxHeavyQuadrupleDashHorizontal.half, boxHeavyQuadrupleDashHorizontal.half.rotat, boxHeavyQuadrupleDashVertical.half, boxHeavyQuadrupleDashVertical.half.rotat, boxHeavyTripleDashHorizontal.half, boxHeavyTripleDashHorizontal.half.rotat, boxHeavyTripleDashVertical.half.rotat, boxHeavyUpAndHorizontal.half.rotat, boxHeavyVerticalAndHorizontal.half, boxHeavyVerticalAndHorizontal.half.rotat, boxHeavyVerticalAndLeft.half.rotat, boxHeavyVerticalAndRight.half.rotat, boxLeftDownHeavyAndRightUpLight.half, boxLeftDownHeavyAndRightUpLight.half.rotat, boxLeftHeavyAndRightDownLight.half, boxLeftHeavyAndRightDownLight.half.rotat, boxLeftHeavyAndRightUpLight.half, boxLeftHeavyAndRightUpLight.half.rotat, boxLeftHeavyAndRightVerticalLight, boxLeftHeavyAndRightVerticalLight.half, boxLeftHeavyAndRightVerticalLight.half.rotat, boxLeftLightAndRightDownHeavy.half, boxLeftLightAndRightDownHeavy.half.rotat, boxLeftLightAndRightUpHeavy.half, boxLeftLightAndRightUpHeavy.half.rotat, boxLeftLightAndRightVerticalHeavy, boxLeftLightAndRightVerticalHeavy.half, boxLeftLightAndRightVerticalHeavy.half.rotat, boxLeftUpHeavyAndRightDownLight.half, boxLeftUpHeavyAndRightDownLight.half.rotat, boxLightDiagonalUpperLeftToLowerRight, boxLightDiagonalUpperRightToLowerLeft, boxLightDownAndHorizontal.half.rotat, boxLightQuadrupleDashHorizontal.half, boxLightQuadrupleDashHorizontal.half.rotat, boxLightQuadrupleDashVertical.half, boxLightQuadrupleDashVertical.half.rotat, boxLightTripleDashHorizontal.half, boxLightTripleDashHorizontal.half.rotat, boxLightTripleDashVertical.half.rotat, boxLightUpAndHorizontal.half.rotat, boxLightVerticalAndHorizontal.half, boxLightVerticalAndHorizontal.half.rotat, boxLightVerticalAndLeft.half.rotat, boxLightVerticalAndRight.half.rotat, boxRightDownHeavyAndLeftUpLight.half, boxRightDownHeavyAndLeftUpLight.half.rotat, boxRightHeavyAndLeftDownLight.half, boxRightHeavyAndLeftDownLight.half.rotat, boxRightHeavyAndLeftUpLight.half, boxRightHeavyAndLeftUpLight.half.rotat, boxRightHeavyAndLeftVerticalLight, boxRightHeavyAndLeftVerticalLight.half, boxRightHeavyAndLeftVerticalLight.half.rotat, boxRightLightAndLeftDownHeavy.half, boxRightLightAndLeftDownHeavy.half.rotat, boxRightLightAndLeftUpHeavy.half, boxRightLightAndLeftUpHeavy.half.rotat, boxRightLightAndLeftVerticalHeavy, boxRightLightAndLeftVerticalHeavy.half, boxRightLightAndLeftVerticalHeavy.half.rotat, boxRightUpHeavyAndLeftDownLight.half, boxRightUpHeavyAndLeftDownLight.half.rotat, boxUpHeavyAndDownHorizontalLight, boxUpHeavyAndDownHorizontalLight.half, boxUpHeavyAndDownHorizontalLight.half.rotat, boxUpHeavyAndHorizontalLight.half, boxUpHeavyAndHorizontalLight.half.rotat, boxUpHeavyAndLeftDownLight.half.rotat, boxUpHeavyAndLeftLight.half.rotat, boxUpHeavyAndRightDownLight.half, boxUpHeavyAndRightDownLight.half.rotat, boxUpHeavyAndRightLight.half.rotat, boxUpLightAndDownHorizontalHeavy, boxUpLightAndDownHorizontalHeavy.half, boxUpLightAndDownHorizontalHeavy.half.rotat, boxUpLightAndHorizontalHeavy.half, boxUpLightAndHorizontalHeavy.half.rotat, boxUpLightAndLeftDownHeavy.half.rotat, boxUpLightAndLeftHeavy.half.rotat, boxUpLightAndRightDownHeavy.half, boxUpLightAndRightDownHeavy.half.rotat, boxUpLightAndRightHeavy.half.rotat, boxVerticalHeavyAndHorizontalLight, boxVerticalHeavyAndHorizontalLight.half, boxVerticalHeavyAndHorizontalLight.half.rotat, boxVerticalHeavyAndLeftLight.half, boxVerticalHeavyAndLeftLight.half.rotat, boxVerticalHeavyAndRightLight.half, boxVerticalHeavyAndRightLight.half.rotat, boxVerticalLightAndHorizontalHeavy, boxVerticalLightAndHorizontalHeavy.half, boxVerticalLightAndHorizontalHeavy.half.rotat, boxVerticalLightAndLeftHeavy.half, boxVerticalLightAndLeftHeavy.half.rotat, boxVerticalLightAndRightHeavy.half, boxVerticalLightAndRightHeavy.half.rotat, boxVerticalSingleAndHorizontalDouble, leftcurlybracketmiddlepiece.vert, leftcurlybracketupperhook_leftcurlybracketlowerhook, leftcurlybracketupperhook_leftcurlybracketlowerhook.vert, quotedoubleprimeReversed.full.vert, quotedoubleprimeReversed.half.rotat, rightcurlybracketmiddlepiece.vert, rightcurlybracketupperhook_rightcurlybracketlowerhook, rightcurlybracketupperhook_rightcurlybracketlowerhook.vert, tortoiseshellbracketleft.half.rotat, tortoiseshellbracketright.half.rotat, whitecornerbracketleft.half.rotat and whitecornerbracketright.half.rotat [code: legacy-long-names]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft's recommendations for OpenType Fonts states the following:\n\n 'NOTE: The PostScript glyph name must be no longer than 31 characters,\n include only uppercase or lowercase English letters, European digits,\n the period or the underscore, i.e. from the set [A-Za-z0-9_.] and\n should start with a letter, except the special glyph name \".notdef\"\n which starts with a period.'\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/recom#post-table\n\n\n In practice, though, particularly in modern environments, glyph names\n can be as long as 63 characters.\n\n According to the \"Adobe Glyph List Specification\" available at:\n\n https://github.com/adobe-type-tools/agl-specification\n ", + "result": "WARN" + }, + { + "description": "Font contains unique glyph names?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyph names are all unique.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Duplicate glyph names prevent font installation on Mac OS X.\n ", + "result": "PASS" + }, + { + "description": "List all superfamily filepaths", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku [code: family-path]", + "status": "INFO", + "traceback": null + } + ], + "rationale": "\n This is a merely informative check that lists all sibling families\n detected by fontbakery.\n\n Only the fontfiles in these directories will be considered in\n superfamily-level checks.\n ", + "result": "INFO" + }, + { + "description": "Each font in set of sibling families must have the same set of vertical metrics values.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Sibling families were not detected.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n We may want all fonts within a super-family (all sibling families) to have\n the same vertical metrics so their line spacing is consistent\n across the super-family.\n\n This is an experimental extended version of\n com.google.fonts/check/family/vertical_metrics and for now it will only\n result in WARNs.\n ", + "result": "SKIP" + }, + { + "description": "Ensure indic fonts have the Indian Rupee Sign glyph.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_indic_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per Bureau of Indian Standards every font supporting one of the\n official Indian languages needs to include Unicode Character\n \u201c\u20b9\u201d (U+20B9) Indian Rupee Sign.\n ", + "result": "SKIP" + }, + { + "description": "Check font contains no unreachable glyphs", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The following glyphs could not be reached by codepoint or substitution rules:\n\n\t- K_K_period\n\n\t- Ten_Fiveroman\n\n\t- Ten_Fourroman\n\n\t- Ten_Threeroman\n\n\t- a_prolonged_rukata\n\n\t- angle.full\n\n\t- angle.mac\n\n\t- approxequalorimage.full\n\n\t- because.full\n\n\t- blackCircle.alt\n\n\t- contourintegral.full\n\n\t- dblintegral.full\n\n\t- element.full\n\n\t- emptyBlock\n\n\t- equivalence.full\n\n\t- existential.full\n\n\t- getamark.rotat\n\n\t- gradient.full\n\n\t- greateroverequal.full\n\n\t- haitsu\n\n\t- herutsu\n\n\t- hoon\n\n\t- inchi\n\n\t- infinity.full\n\n\t- intersection.alt\n\n\t- intersection.full\n\n\t- koopo\n\n\t- leftRightDoubleArrow.full\n\n\t- leftcurlybracketlowerhook.vert\n\n\t- leftcurlybracketmiddlepiece.vert\n\n\t- leftcurlybracketupperhook.vert\n\n\t- leftcurlybracketupperhook_leftcurlybracketlowerhook\n\n\t- leftcurlybracketupperhook_leftcurlybracketlowerhook.vert\n\n\t- lessoverequal.full\n\n\t- logicaland.full\n\n\t- logicalor.full\n\n\t- mars.alt\n\n\t- minute.full\n\n\t- muchgreater.full\n\n\t- muchless.full\n\n\t- notequal.full\n\n\t- orthogonal.full\n\n\t- partialdiff.full\n\n\t- peeji\n\n\t- perpendicular.mac\n\n\t- proportional.full\n\n\t- quotebottomright\n\n\t- quotedblbottomleft\n\n\t- quotedblbottomright\n\n\t- quotedbltopleft\n\n\t- quotetopleft\n\n\t- radical.full\n\n\t- radical.mac\n\n\t- reflexsubset.full\n\n\t- reflexsuperset.full\n\n\t- reversedtilde.full\n\n\t- rightDoubleArrow.full\n\n\t- rightcurlybracketlowerhook.vert\n\n\t- rightcurlybracketmiddlepiece.vert\n\n\t- rightcurlybracketupperhook.vert\n\n\t- rightcurlybracketupperhook_rightcurlybracketlowerhook\n\n\t- rightcurlybracketupperhook_rightcurlybracketlowerhook.vert\n\n\t- righttriangle.full\n\n\t- second.full\n\n\t- sento\n\n\t- space.half\n\n\t- spacehira.half\n\n\t- spacekata.half\n\n\t- subset.full\n\n\t- suchthat.full\n\n\t- summation.full\n\n\t- superset.full\n\n\t- ten_fiveroman\n\n\t- ten_fourroman\n\n\t- ten_threeroman\n\n\t- therefore.full\n\n\t- tripleintegral.full\n\n\t- uni3318.alt\n\n\t- uni51DE.vari5\n\n\t- uni5307.vari2\n\n\t- uni5370.box\n\n\t- uni585A.vari3\n\n\t- uni5927.circled\n\n\t- uni5C0F.circled\n\n\t- uni63A7.circled\n\n\t- uni661E.vari2\n\n\t- uni6801.vari2\n\n\t- uni8612.vari2\n\n\t- uni8B7F.vari1\n\n\t- uni9686.vari3\n\n\t- uni9755.vari2\n\n\t- uniFA11.vari2\n\n\t- uniFA24.vari2\n\n\t- union.alt\n\n\t- union.full\n\n\t- universal.full\n\n\t- uptack.full\n\n\t- watto\n\n\t- whiteCircle.alt\n\n\t- yaado\n\n\t- zero.paren\n [code: unreachable-glyphs]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Glyphs are either accessible directly through Unicode codepoints or through\n substitution rules.\n\n In Color Fonts, glyphs are also referenced by the COLR table.\n\n Any glyphs not accessible by either of these means\n are redundant and serve only to increase the font's file size.\n ", + "result": "WARN" + }, + { + "description": "Check if each glyph has the recommended amount of contours.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This check inspects the glyph outlines and detects the total number of contours in each of them. The expected values are infered from the typical ammounts of contours observed in a large collection of reference font families. The divergences listed below may simply indicate a significantly different design on some of your glyphs. On the other hand, some of these may flag actual bugs in the font such as glyphs mapped to an incorrect codepoint. Please consider reviewing the design and codepoint assignment of these to make sure they are correct.\n\nThe following glyphs do not have the recommended number of contours:\n\n\t- Glyph name: Q\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: softhyphen\tContours detected: 1\tExpected: 0\n\n\t- Glyph name: oe\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni210A\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni2113\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: boxVerticalSingleAndRightDouble\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: boxVerticalSingleAndLeftDouble\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: Q\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: fi\tContours detected: 1\tExpected: 3\n\n\t- Glyph name: fl\tContours detected: 1\tExpected: 2\n\n\t- Glyph name: oe\tContours detected: 4\tExpected: 3\n\n\t- Glyph name: uni210A\tContours detected: 3\tExpected: 2\n\n\t- Glyph name: uni2113\tContours detected: 1\tExpected: 2\n [code: contour-count]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Visually QAing thousands of glyphs by hand is tiring. Most glyphs can only\n be constructured in a handful of ways. This means a glyph's contour count\n will only differ slightly amongst different fonts, e.g a 'g' could either\n be 2 or 3 contours, depending on whether its double story or single story.\n\n However, a quotedbl should have 2 contours, unless the font belongs\n to a display family.\n\n This check currently does not cover variable fonts because there's plenty\n of alternative ways of constructing glyphs with multiple outlines for each\n feature in a VarFont. The expected contour count data for this check is\n currently optimized for the typical construction of glyphs in static fonts.\n ", + "result": "WARN" + }, + { + "description": "Does the font contain a soft hyphen?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font has a 'Soft Hyphen' character. [code: softhyphen]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The 'Soft Hyphen' character (codepoint 0x00AD) is used to mark\n a hyphenation possibility within a word in the absence of or\n overriding dictionary hyphenation.\n\n It is sometimes designed empty with no width (such as a control character),\n sometimes the same as the traditional hyphen, sometimes double encoded with\n the hyphen.\n\n That being said, it is recommended to not include it in the font at all,\n because discretionary hyphenation should be handled at the level of the\n shaping engine, not the font. Also, even if present, the software would\n not display that character.\n\n More discussion at:\n https://typedrawers.com/discussion/2046/special-dash-things-softhyphen-horizontalbar\n ", + "result": "WARN" + }, + { + "description": "Does the font contain chws and vchw features?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "chws feature not found in font. Use chws_tool (https://github.com/googlefonts/chws_tool) to add it. [code: missing-chws-feature]", + "status": "WARN", + "traceback": null + }, + { + "message": "vchw feature not found in font. Use chws_tool (https://github.com/googlefonts/chws_tool) to add it. [code: missing-vchw-feature]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n The W3C recommends the addition of chws and vchw features to CJK fonts\n to enhance the spacing of glyphs in environments which do not fully support\n JLREQ layout rules.\n\n The chws_tool utility (https://github.com/googlefonts/chws_tool) can be used\n to add these features automatically.\n ", + "result": "WARN" + }, + { + "description": "Ensure component transforms do not perform scaling or rotation.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No glyphs had components with scaling or rotation", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Some families have glyphs which have been constructed by using\n transformed components e.g the 'u' being constructed from a flipped 'n'.\n\n From a designers point of view, this sounds like a win (less work).\n However, such approaches can lead to rasterization issues, such as\n having the 'u' not sitting on the baseline at certain sizes after\n running the font through ttfautohint.\n\n Other issues are outlines that end up reversed when only one dimension\n is flipped while the other isn't.\n\n As of July 2019, Marc Foley observed that ttfautohint assigns cvt values\n to transformed glyphs as if they are not transformed and the result is\n they render very badly, and that vttLib does not support flipped components.\n\n When building the font with fontmake, the problem can be fixed by adding\n this to the command line:\n\n --filter DecomposeTransformedComponentsFilter\n ", + "result": "PASS" + }, + { + "description": "Ensure no GPOS7 lookups are present.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has no GPOS7 lookups", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Versions of fonttools >=4.14.0 (19 August 2020) perform an optimisation on\n chained contextual lookups, expressing GSUB6 as GSUB5 and GPOS8 and GPOS7\n where possible (when there are no suffixes/prefixes for all rules in\n the lookup).\n\n However, makeotf has never generated these lookup types and they are rare\n in practice. Perhaps before of this, Mac's CoreText shaper does not correctly\n interpret GPOS7, meaning that these lookups will be ignored by the shaper,\n and fonts containing these lookups will have unintended positioning errors.\n\n To fix this warning, rebuild the font with a recent version of fonttools.\n ", + "result": "PASS", + "severity": 9 + }, + { + "description": "Ensure that the font can be rasterized by FreeType.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font can be rasterized by FreeType.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Malformed fonts can cause FreeType to crash.\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Font has the proper sfntVersion value?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has the correct sfntVersion value.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n OpenType fonts that contain TrueType outlines should use the value of 0x00010000\n for the sfntVersion. OpenType fonts containing CFF data (version 1 or 2) should\n use 0x4F54544F ('OTTO', when re-interpreted as a Tag) for sfntVersion.\n\n Fonts with the wrong sfntVersion value are rejected by FreeType.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/otff#table-directory\n ", + "result": "PASS", + "severity": 10 + }, + { + "description": "Space and non-breaking space have the same width?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Space and non-breaking space have the same width.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n If the space and nbspace glyphs have different widths, then Google Workspace\n has problems with the font.\n\n The nbspace is used to replace the space character in multiple situations in\n documents; such as the space before punctuation in languages that do that. It\n avoids the punctuation to be separated from the last word and go to next line.\n\n This is automatic substitution by the text editors, not by fonts. It's also used\n by designers in text composition practice to create nicely shaped paragraphs.\n If the space and the nbspace are not the same width, it breaks the text\n composition of documents.\n ", + "result": "PASS" + }, + { + "description": "Detect any interpolation issues in the font.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When creating a variable font, the designer must make sure that corresponding\n paths have the same start points across masters, as well as that corresponding\n component shapes are placed in the same order within a glyph across masters.\n If this is not done, the glyph will not interpolate correctly.\n\n Here we check for the presence of potential interpolation errors using the\n fontTools.varLib.interpolatable module.\n ", + "result": "SKIP", + "severity": 4 + }, + { + "description": "Check math signs have the same width.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The most common width is 620 among a set of 2 math glyphs.\nThe following math glyphs have a different width, though:\n\nWidth = 687:\nplus\n\nWidth = 640:\nequal\n\nWidth = 649:\nlogicalnot\n\nWidth = 643:\nplusminus\n\nWidth = 578:\nmultiply\n\nWidth = 678:\ndivide\n\nWidth = 565:\nminus\n\nWidth = 1000:\npostalmark\n [code: width-outliers]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n It is a common practice to have math signs sharing the same width\n (preferably the same width as tabular figures accross the entire font family).\n\n This probably comes from the will to avoid additional tabular math signs\n knowing that their design can easily share the same width.\n ", + "result": "WARN" + }, + { + "description": "Checking Vertical Metric Linegaps.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 sTypoLineGap and hhea lineGap are both 0.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The LineGap value is a space added to the line height created by the union\n of the (typo/hhea)Ascender and (typo/hhea)Descender. It is handled differently\n according to the environment.\n\n This leading value will be added above the text line in most desktop apps.\n It will be shared above and under in web browsers, and ignored in Windows\n if Use_Typo_Metrics is disabled.\n\n For better linespacing consistency across platforms,\n (typo/hhea)LineGap values must be 0.\n ", + "result": "PASS" + }, + { + "description": "Checking STAT table entries in static fonts.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Adobe feature syntax allows for the definition of a STAT table. Fonts built\n with a hand-coded STAT table in feature syntax may be built either as static\n or variable, but will end up with the same STAT table.\n\n This is a problem, because a STAT table which works on variable fonts\n will not be appropriate for static instances. The examples in the OpenType spec\n of non-variable fonts with a STAT table show that the table entries must be\n restricted to those entries which refer to the static font's position in\n the designspace. i.e. a Regular weight static should only have the following\n entry for the weight axis:\n\n \n \n \n \n\n However, if the STAT table intended for a variable font is compiled into a\n static, it will have many entries for this axis. In this case, Windows will\n read the first entry only, causing all instances to report themselves\n as \"Thin Condensed\".\n ", + "result": "SKIP" + }, + { + "description": "Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Looks good!", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Lcaron, dcaron, lcaron, tcaron should NOT be composed with quoteright\n or quotesingle or comma or caron(comb). It should be composed with a\n distinctive glyph which doesn't look like an apostrophe.\n\n Source:\n https://ilovetypography.com/2009/01/24/on-diacritics/\n http://diacritics.typo.cz/index.php?id=5\n https://www.typotheque.com/articles/lcaron\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "INFO": 2, + "PASS": 17, + "SKIP": 7, + "WARN": 7 + } + }, + { + "checks": [ + { + "description": "Is the CFF subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The Type 2 Charstring Format, Technical Note #5177\",\n the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Is the CFF2 subr/gsubr call depth > 10?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff2", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Per \"The CFF2 CharString Format\", the \"Subr nesting, stack limit\" is 10.\n ", + "result": "SKIP" + }, + { + "description": "Does the font use deprecated CFF operators or operations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The 'dotsection' operator and the use of 'endchar' to build accented characters\n from the Adobe Standard Encoding Character Set (\"seac\") are deprecated in CFF.\n Adobe recommends repairing any fonts that use these, especially endchar-as-seac,\n because a rendering issue was discovered in Microsoft Word with a font that\n makes use of this operation. The check treats that usage as a FAIL.\n There are no known ill effects of using dotsection, so that check is a WARN.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 3 + } + }, + { + "checks": [ + { + "description": "Fonts have equal unicode encodings?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have equal unicode encodings.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "Make sure all font files have the same version value.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "All font files have the same version.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking unitsPerEm value is reasonable.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Filtered: Google Fonts has a stricter policy which is enforced by com.google.fonts/check/unitsperem_strict", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec:\n\n The value of unitsPerEm at the head table must be a value\n between 16 and 16384. Any value in this range is valid.\n\n In fonts that have TrueType outlines, a power of 2 is recommended\n as this allows performance optimizations in some rasterizers.\n\n But 1000 is a commonly used value. And 2000 may become\n increasingly more common on Variable Fonts.\n ", + "result": "SKIP" + }, + { + "description": "Checking font version fields (head and name table).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All font version fields match.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking head.macStyle value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "head macStyle ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "head macStyle BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The values of the flags on the macStyle entry on the 'head' OpenType table\n that describe whether a font is bold and/or italic must be coherent with the\n actual style of the font as inferred by its filename.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3, + "SKIP": 1 + } + }, + { + "checks": [ + { + "description": "Fonts have consistent PANOSE proportion?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent PANOSE proportion.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Fonts have consistent PANOSE family type?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent PANOSE family type.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check that OS/2.fsSelection bold & italic settings are unique for each NameID1", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "The OS/2.fsSelection bold & italic settings were unique within each compatible family group.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec: name ID 1 'is used in combination with Font Subfamily\n name (name ID 2), and should be shared among at most four fonts that differ\n only in weight or style.\n\n This four-way distinction should also be reflected in the OS/2.fsSelection\n field, using bits 0 and 5.\n ", + "result": "PASS" + }, + { + "description": "Check if OS/2 xAvgCharWidth is correct.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 xAvgCharWidth value is correct.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check if OS/2 fsSelection matches head macStyle bold and italic bits.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The OS/2.fsSelection and head.macStyle bold and italic settings match.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The bold and italic bits in OS/2.fsSelection must match the bold and italic\n bits in head.macStyle per the OpenType spec.\n ", + "result": "PASS" + }, + { + "description": "Check code page character ranges", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "At least one code page is defined.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n At least some programs (such as Word and Sublime Text) under Windows 7\n do not recognize fonts unless code page bits are properly set on the\n ulCodePageRange1 (and/or ulCodePageRange2) fields of the OS/2 table.\n\n More specifically, the fonts are selectable in the font menu, but whichever\n Windows API these applications use considers them unsuitable for any\n character set, so anything set in these fonts is rendered with Arial as a\n fallback font.\n\n This check currently does not identify which code pages should be set.\n Auto-detecting coverage is not trivial since the OpenType specification\n leaves the interpretation of whether a given code page is \"functional\"\n or not open to the font developer to decide.\n\n So here we simply detect as a FAIL when a given font has no code page\n declared at all.\n ", + "result": "PASS" + }, + { + "description": "Checking OS/2 achVendID against configuration.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Add the `vendor_id` key to a `fontbakery.yaml` file on your font project directory to enable this check.\nYou'll also need to use the `--configuration` flag when invoking fontbakery.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n When a font project's Vendor ID is specified explicitly on FontBakery's\n configuration file, all binaries must have a matching vendor identifier\n value in the OS/2 table.\n ", + "result": "SKIP" + }, + { + "description": "Checking OS/2 fsSelection value.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "OS/2 fsSelection REGULAR bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection ITALIC bit is properly set.", + "status": "PASS", + "traceback": null + }, + { + "message": "OS/2 fsSelection BOLD bit is properly set.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 7, + "SKIP": 1 + } + }, + { + "checks": [ + { + "description": "Fonts have consistent underline thickness?", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Fonts have consistent underline thickness.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Dave C Lemon (Adobe Type Team) recommends setting the underline thickness to be\n consistent across the family.\n\n If thicknesses are not family consistent, words set on the same line which have\n different styles look strange.\n ", + "result": "PASS" + }, + { + "description": "Font has correct post table version?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has an acceptable post format 2.0 table version.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Format 2.5 of the 'post' table was deprecated in OpenType 1.3 and\n should not be used.\n\n According to Thomas Phinney, the possible problem with post format 3\n is that under the right combination of circumstances, one can generate\n PDF from a font with a post format 3 table, and not have accurate backing\n store for any text that has non-default glyphs for a given codepoint.\n\n It will look fine but not be searchable. This can affect Latin text with\n high-end typography, and some complex script writing systems, especially\n with higher-quality fonts. Those circumstances generally involve creating\n a PDF by first printing a PostScript stream to disk, and then creating a\n PDF from that stream without reference to the original source document.\n There are some workflows where this applies,but these are not common\n use cases.\n\n Apple recommends against use of post format version 4 as \"no longer\n necessary and should be avoided\". Please see the Apple TrueType reference\n documentation for additional details.\n\n https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6post.html\n\n Acceptable post format versions are 2 and 3 for TTF and OTF CFF2 builds,\n and post format 3 for CFF builds.\n ", + "result": "PASS" + }, + { + "description": "Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Value of post.italicAngle is 0.0 with style=\"Regular\".", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The 'post' table italicAngle property should be a reasonable amount, likely\n not more than 30\u00b0. Note that in the OpenType specification, the value is\n negative for a rightward lean.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/post\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3 + } + }, + { + "checks": [ + { + "description": "Verify that each group of fonts with the same nameID 1 has maximum of 4 fonts.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "There were no more than 4 fonts per family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec:\n\n 'The Font Family name [...] should be shared among at most four fonts that\n differ only in weight or style [...]'\n ", + "result": "PASS" + }, + { + "description": "Verify that family names in the name table are consistent across all fonts in the family. Checks Typographic Family name (nameID 16) if present, otherwise uses Font Family name (nameID 1)", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "Font family names are consistent across the family.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Per the OpenType spec:\n * \"...many existing applications that use this pair of names assume that a\n Font Family name is shared by at most four fonts that form a font\n style-linking group\"\n * \"For extended typographic families that includes fonts other than the\n four basic styles(regular, italic, bold, bold italic), it is strongly\n recommended that name IDs 16 and 17 be used in fonts to create an\n extended, typographic grouping.\"\n * \"If name ID 16 is absent, then name ID 1 is considered to be the\n typographic family name.\"\n\n https://learn.microsoft.com/en-us/typography/opentype/spec/name\n\n Fonts within a font family all must have consistent names\n in the Typographic Family name (nameID 16)\n or Font Family name (nameID 1), depending on which it uses.\n\n Inconsistent font/typographic family names across fonts in a family\n can result in unexpected behaviors, such as broken style linking.\n ", + "result": "PASS" + }, + { + "description": "Check name table for empty records.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No empty name table records found.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check the name table for empty records,\n as this can cause problems in Adobe apps.\n ", + "result": "PASS" + }, + { + "description": "Description strings in the name table must not contain copyright info.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Description strings in the name table do not contain any copyright string.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Checking correctness of monospaced metadata.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font is not monospaced and all related metadata look good. [code: good]", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There are various metadata in the OpenType spec to specify if a font is\n monospaced or not. If the font is not truly monospaced, then no monospaced\n metadata should be set (as sometimes they mistakenly are...)\n\n Requirements for monospace fonts:\n\n * post.isFixedPitch - \"Set to 0 if the font is proportionally spaced,\n non-zero if the font is not proportionally spaced (monospaced)\"\n (https://www.microsoft.com/typography/otspec/post.htm)\n\n * hhea.advanceWidthMax must be correct, meaning no glyph's width value\n is greater. (https://www.microsoft.com/typography/otspec/hhea.htm)\n\n * OS/2.panose.bProportion must be set to 9 (monospace) on latin text fonts.\n\n * OS/2.panose.bSpacing must be set to 3 (monospace) on latin hand written\n or latin symbol fonts.\n\n * Spec says: \"The PANOSE definition contains ten digits each of which currently\n describes up to sixteen variations. Windows uses bFamilyType, bSerifStyle\n and bProportion in the font mapper to determine family type. It also uses\n bProportion to determine if the font is monospaced.\"\n (https://www.microsoft.com/typography/otspec/os2.htm#pan\n https://monotypecom-test.monotype.de/services/pan2)\n\n * OS/2.xAvgCharWidth must be set accurately.\n \"OS/2.xAvgCharWidth is used when rendering monospaced fonts,\n at least by Windows GDI\"\n (http://typedrawers.com/discussion/comment/15397/#Comment_15397)\n\n Also we should report an error for glyphs not of average width.\n\n\n Please also note:\n\n Thomas Phinney told us that a few years ago (as of December 2019), if you gave\n a font a monospace flag in Panose, Microsoft Word would ignore the actual\n advance widths and treat it as monospaced.\n\n Source: https://typedrawers.com/discussion/comment/45140/#Comment_45140\n ", + "result": "PASS" + }, + { + "description": "Does full font name begin with the font family name?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Full font name begins with the font family name.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The FULL_FONT_NAME entry in the \u2018name\u2019 table should start with the same string\n as the Family Name (FONT_FAMILY_NAME, TYPOGRAPHIC_FAMILY_NAME or\n WWS_FAMILY_NAME).\n\n If the Family Name is not included as the first part of the Full Font Name, and\n the user embeds the font in a document using a Microsoft Office app, the app\n will fail to render the font when it opens the document again.\n\n NOTE: Up until version 1.5, the OpenType spec included the following exception\n in the definition of Full Font Name:\n\n \"An exception to the [above] definition of Full font name is for Microsoft\n platform strings for CFF OpenType fonts: in this case, the Full font name\n string must be identical to the PostScript FontName in the CFF Name INDEX.\"\n\n https://docs.microsoft.com/en-us/typography/opentype/otspec150/name#name-ids\n ", + "result": "PASS" + }, + { + "description": "PostScript name follows OpenType specification requirements?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "PostScript name follows requirements. [code: psname-ok]", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Font follows the family naming recommendations?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font follows the family naming recommendations.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "CFF table FontName must match name table ID 6 (PostScript name).", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_cff", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should match\n the FontName string in the 'CFF ' table.\n\n The 'CFF ' table has a lot of information that is duplicated in other tables.\n This information should be consistent across tables, because there's\n no guarantee which table an app will get the data from.\n ", + "result": "SKIP" + }, + { + "description": "Name table ID 6 (PostScript name) must be consistent across platforms.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Entries in the \"name\" table for ID 6 (PostScript name) are consistent.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n The PostScript name entries in the font's 'name' table should be\n consistent across platforms.\n\n This is the TTF/CFF2 equivalent of the CFF 'name/postscript_vs_cff' check.\n ", + "result": "PASS" + }, + { + "description": "Check name table IDs 1, 2, 16, 17 to conform to Italic style.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font is not Italic.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n This check ensures that several entries in the name table\n conform to the font's Upright or Italic style,\n namely IDs 1 & 2 as well as 16 & 17 if they're present.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 9, + "SKIP": 2 + } + }, + { + "checks": [ + { + "description": "Does the number of glyphs in the loca table match the maxp table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "'loca' table matches numGlyphs in 'maxp' table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "MaxAdvanceWidth is consistent with values in the Hmtx and Hhea tables.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check hhea.caretSlopeRise and hhea.caretSlopeRun", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "hhea.caretSlopeRise and hhea.caretSlopeRun match with post.italicAngle.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Checks whether hhea.caretSlopeRise and hhea.caretSlopeRun\n match with post.italicAngle.\n\n For Upright fonts, you can set hhea.caretSlopeRise to 1\n and hhea.caretSlopeRun to 0.\n\n For Italic fonts, you can set hhea.caretSlopeRise to head.unitsPerEm\n and calculate hhea.caretSlopeRun like this:\n round(math.tan(\n math.radians(-1 * font[\"post\"].italicAngle)) * font[\"head\"].unitsPerEm)\n\n This check allows for a 0.1\u00b0 rounding difference between the Italic angle\n as calculated by the caret slope and post.italicAngle\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 2 + } + }, + { + "checks": [ + { + "description": "Does the font have a DSIG table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "This font has a digital signature (DSIG table) which is only required - even if only a placeholder - on old programs like MS Office 2013 in order to work properly.\nThe current recommendation is to completely remove the DSIG table. [code: found-DSIG]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n Microsoft Office 2013 and below products expect fonts to have a digital\n signature declared in a DSIG table in order to implement OpenType features.\n The EOL date for Microsoft Office 2013 products is 4/11/2023.\n This issue does not impact Microsoft Office 2016 and above products.\n\n As we approach the EOL date, it is now considered better to\n completely remove the table.\n\n But if you still want your font to support OpenType features on Office 2013,\n then you may find it handy to add a fake signature on a placeholder DSIG table\n by running one of the helper scripts provided at\n https://github.com/googlefonts/gftools\n\n Reference: https://github.com/fonttools/fontbakery/issues/1845\n ", + "result": "WARN" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "WARN": 1 + } + }, + { + "checks": [ + { + "description": "Check glyphs in mark glyph class are non-spacing.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class should be non-spacing.\n\n Spacing glyphs in the GDEF mark glyph class may have incorrect anchor\n positioning that was only intended for building composite glyphs during design.\n ", + "result": "SKIP" + }, + { + "description": "Check mark characters are in GDEF mark glyph class.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Mark characters should be in the GDEF mark glyph class.\n ", + "result": "SKIP" + }, + { + "description": "Check GDEF mark glyph class doesn't have characters that are not marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"GDEF\" table or has any GDEF glyph class definition.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Glyphs in the GDEF mark glyph class become non-spacing and may be repositioned\n if they have mark anchors.\n\n Only combining mark glyphs should be in that class. Any non-mark glyph\n must not be in that class, in particular spacing glyphs.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 3 + } + }, + { + "checks": [ + { + "description": "Does GPOS table have kerning information? This check skips monospaced fonts as defined by post.isFixedPitch value", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "GPOS table lacks kerning information. [code: lacks-kern-info]", + "status": "WARN", + "traceback": null + } + ], + "result": "WARN" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "WARN": 1 + } + }, + { + "checks": [ + { + "description": "Is there a usable \"kern\" table declared in the font?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font does not declare an optional \"kern\" table.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Even though all fonts should have their kerning implemented in the GPOS table,\n there may be kerning info at the kern table as well.\n\n Some applications such as MS PowerPoint require kerning info on the kern table.\n More specifically, they require a format 0 kern subtable from a kern table\n version 0 with only glyphs defined in the cmap table, which is the only one\n that Windows understands (and which is also the simplest and more limited\n of all the kern subtables).\n\n Google Fonts ingests fonts made for download and use on desktops, and does\n all web font optimizations in the serving pipeline (using libre libraries\n that anyone can replicate.)\n\n Ideally, TTFs intended for desktop users (and thus the ones intended for\n Google Fonts) should have both KERN and GPOS tables.\n\n Given all of the above, we currently treat kerning on a v0 kern table\n as a good-to-have (but optional) feature.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1 + } + }, + { + "checks": [ + { + "description": "Is there any unused data at the end of the glyf table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "There is no unused data at the end of the glyf table.", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check for points out of bounds.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "All glyph paths have coordinates within bounds!", + "status": "PASS", + "traceback": null + } + ], + "result": "PASS" + }, + { + "description": "Check glyphs do not have duplicate components which have the same x,y coordinates.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Glyphs do not contain duplicate components which have the same x,y coordinates.", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n There have been cases in which fonts had faulty double quote marks, with each\n of them containing two single quote marks as components with the same\n x, y coordinates which makes them visually look like single quote marks.\n\n This check ensures that glyphs do not contain duplicate components\n which have the same x,y coordinates.\n ", + "result": "PASS" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3 + } + }, + { + "checks": [ + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 400 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n If a variable font has a 'wght' (Weight) axis, then the coordinate of\n its 'Regular' instance is required to be 400.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must be 100 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n If a variable font has a 'wdth' (Width) axis, then the coordinate of\n its 'Regular' instance is required to be 100.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'slnt' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_slnt\n\n If a variable font has a 'slnt' (Slant) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'ital' (Italic) axis coordinate must be zero on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_ital_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'ital' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_ital\n\n If a variable font has a 'ital' (Italic) axis, then the coordinate of\n its 'Regular' instance is required to be zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'opsz' (Optical Size) axis coordinate should be between 10 and 16 on the 'Regular' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_opsz_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'opsz' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_opsz\n\n If a variable font has an 'opsz' (Optical Size) axis, then\n the coordinate of its 'Regular' instance is recommended to be\n a value in the range 10 to 16.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be 700 on the 'Bold' instance.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The Open-Type spec's registered\n design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n does not specify a required value for the 'Bold' instance of a variable font.\n\n But Dave Crossland suggested that we should enforce\n a required value of 700 in this case (NOTE: a distinction\n is made between \"no bold instance present\" vs \"bold instance is present\n but its wght coordinate is not == 700\").\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wght' (Weight) axis coordinate must be within spec range of 1 to 1000 on all instances.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wght_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wght' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wght\n\n On the 'wght' (Weight) axis, the valid coordinate range is 1-1000.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'wdth' (Width) axis coordinate must strictly greater than zero.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_wdth_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's\n registered design-variation tag 'wdth' available at\n https://docs.microsoft.com/en-gb/typography/opentype/spec/dvaraxistag_wdth\n\n On the 'wdth' (Width) axis, the valid numeric range is strictly greater than\n zero.\n ", + "result": "SKIP" + }, + { + "description": "The variable font 'slnt' (Slant) axis coordinate specifies positive values in its range?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font, has_slnt_axis", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The OpenType spec says at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxistag_slnt that:\n\n [...] the scale for the Slant axis is interpreted as the angle of slant\n in counter-clockwise degrees from upright. This means that a typical,\n right-leaning oblique design will have a negative slant value. This matches\n the scale used for the italicAngle field in the post table.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of axisNameID used by each VariationAxisRecord is greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The axisNameID field provides a name ID that can be used to obtain strings\n from the 'name' table that can be used to refer to the axis in application\n user interfaces. The name ID must be greater than 255 and less than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of subfamilyNameID used by each InstanceRecord is 2, 17, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The subfamilyNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 17 (typographic subfamily) strings for the given instance. Values of\n 2 or 17 can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that the value of postScriptNameID used by each InstanceRecord is 6, 0xFFFF, or greater than 255 and less than 32768.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The postScriptNameID field provides a name ID that can be used to obtain\n strings from the 'name' table that can be treated as equivalent to name\n ID 6 (PostScript name) strings for the given instance. Values of 6 and\n 0xFFFF can be used; otherwise, values must be greater than 255 and less\n than 32768.\n ", + "result": "SKIP" + }, + { + "description": "Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9.1\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n The default instance of a font is that instance for which the coordinate\n value of each axis is the defaultValue specified in the corresponding\n variation axis record. An instance record is not required for the default\n instance, though an instance record can be provided. When enumerating named\n instances, the default instance should be enumerated even if there is no\n corresponding instance record. If an instance record is included for the\n default instance (that is, an instance record has coordinates set to default\n values), then the nameID value should be set to either 2 or 17 or to a\n name ID with the same value as name ID 2 or 17. Also, if a postScriptNameID is\n included in instance records, and the postScriptNameID value should be set\n to 6 or to a name ID with the same value as name ID 6.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have the same size.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a given font must be the same size, with\n all either including or omitting the postScriptNameID field. [...]\n If the value is 0xFFFF, then the value is ignored, and no PostScript name\n equivalent is provided for the instance.\n ", + "result": "SKIP" + }, + { + "description": "Validates that all of the instance records in a given font have distinct data.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the 'fvar' documentation in OpenType spec v1.9\n https://docs.microsoft.com/en-us/typography/opentype/spec/fvar\n\n All of the instance records in a font should have distinct coordinates\n and distinct subfamilyNameID and postScriptName ID values. If two or more\n records share the same coordinates, the same nameID values or the same\n postScriptNameID values, then all but the first can be ignored.\n ", + "result": "SKIP" + }, + { + "description": "Validate foundry-defined design-variation axis tag names.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the Open-Type spec's syntactic requirements for\n foundry-defined design-variation axis tags available at\n https://learn.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Foundry-defined tags must begin with an uppercase letter\n and must use only uppercase letters or digits.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 16 + } + }, + { + "checks": [ + { + "description": "Ensure VFs have 'ital' STAT axis.", + "key": [ + "", + "", + [] + ], + "logs": [ + { + "message": "OK", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Check that related Upright and Italic VFs have a\n 'ital' axis in STAT table.\n ", + "result": "PASS" + }, + { + "description": "All fvar axes have a correspondent Axis Record on STAT table?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: is_variable_font", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, there must be an Axis Record\n for every axis defined in the fvar table.\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-records\n ", + "result": "SKIP" + }, + { + "description": "STAT table has Axis Value tables?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n According to the OpenType spec, in a variable font, it is strongly recommended\n that axis value tables be included for every element of typographic subfamily\n names for all of the named instances defined in the 'fvar' table.\n\n Axis value tables are particularly important for variable fonts, but can also\n be used in non-variable fonts. When used in non-variable fonts, axis value\n tables for particular values should be implemented consistently across fonts\n in the family.\n\n If present, Format 4 Axis Value tables are checked to ensure they have more than\n one AxisValueRecord (a strong recommendation from the OpenType spec).\n\n https://docs.microsoft.com/en-us/typography/opentype/spec/stat#axis-value-tables\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is boolean value (derived from com.google.fonts/check/italic_axis_in_stat_is_boolean)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the value of the 'ital' STAT axis is boolean (either 0 or 1),\n and elided for the Upright and not elided for the Italic,\n and that the Upright is linked to the Italic.\n ", + "result": "SKIP" + }, + { + "description": "Ensure 'ital' STAT axis is last. (derived from com.google.fonts/check/italic_axis_last)", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Unfulfilled Conditions: has_STAT_table", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Check that the 'ital' STAT axis is last in axis order.\n ", + "result": "SKIP" + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 1, + "SKIP": 4 + } + }, + { + "checks": [ + { + "description": "Does the font have any invalid feature tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid feature tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect tags can be indications of typos, leftover debugging code or\n questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid script tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid script tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect script tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + }, + { + "description": "Does the font have any invalid language tags?", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "No invalid language tags were found", + "status": "PASS", + "traceback": null + } + ], + "rationale": "\n Incorrect language tags can be indications of typos, leftover debugging code\n or questionable approaches, or user error in the font editor. Such typos can\n cause features and language support to fail to work as intended.\n ", + "result": "PASS", + "severity": 8 + } + ], + "key": [ + "", + null, + null + ], + "result": { + "PASS": 3 + } + }, + { + "checks": [ + { + "description": "Check that texts shape as per expectation", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and compares expected shaping against actual shaping, reporting\n any differences.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no forbidden glyphs are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports if any glyphs are generated in the shaping which should\n not be produced. (For example, .notdef glyphs, visible viramas, etc.)\n\n Shaping test suites should be written by the font engineer and referenced in\n the FontBakery configuration file. For more information about write shaping\n test files and how to configure FontBakery to read the shaping test suites,\n see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Check that no collisions are found while shaping", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Shaping test directory not defined in configuration file", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n Fonts with complex layout rules can benefit from regression tests to ensure\n that the rules are behaving as designed. This checks runs a shaping test\n suite and reports instances where the glyphs collide in unexpected ways.\n\n Shaping test suites should be written by the font engineer and referenced\n in the FontBakery configuration file. For more information about write\n shaping test files and how to configure FontBakery to read the shaping\n test suites, see https://simoncozens.github.io/tdd-for-otl/\n ", + "result": "SKIP" + }, + { + "description": "Ensure dotted circle glyph is present and can attach marks.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "Font has no nonspacing mark glyphs.", + "status": "SKIP", + "traceback": null + } + ], + "rationale": "\n The dotted circle character (U+25CC) is inserted by shaping engines before\n mark glyphs which do not have an associated base, especially in the context\n of broken syllabic clusters.\n\n For fonts containing combining marks, it is recommended that the dotted circle\n character be included so that these isolated marks can be displayed properly;\n for fonts supporting complex scripts, this should be considered mandatory.\n\n Additionally, when a dotted circle glyph is present, it should be able to\n display all marks correctly, meaning that it should contain anchors for all\n attaching marks.\n ", + "result": "SKIP", + "severity": 3 + }, + { + "description": "Ensure soft_dotted characters lose their dot when combined with marks that replace the dot.", + "filename": "/home/runner/work/gf-dashboard/gf-dashboard/fonts/ofl/yujisyuku/YujiSyuku-Regular.ttf", + "key": [ + "", + "", + [ + [ + "font", + 0 + ] + ] + ], + "logs": [ + { + "message": "The dot of soft dotted characters used in orthographies _must_ disappear in the following strings: j\u0301 j\u0308\n\nThe dot of soft dotted characters _should_ disappear in other cases, for example: i\u0305 i\u0328\u0305 j\u0305 j\u0306 j\u0307 j\u030b j\u030c j\u0328\u0301 j\u0328\u0305 j\u0328\u0306 j\u0328\u0307 j\u0328\u0308 j\u0328\u030b j\u0328\u030c\n\nYour font does *not* cover the following languages that require the soft-dotted feature: Kom (Latn, 360,685 speakers), Koonzime (Latn, 40,000 speakers), Aghem (Latn, 38,843 speakers), Lugbara (Latn, 2,200,000 speakers), Belarusian (Cyrl, 10,064,517 speakers), Avokaya (Latn, 100,000 speakers), Igbo (Latn, 27,823,640 speakers), Ejagham (Latn, 120,000 speakers), Ebira (Latn, 2,200,000 speakers), Ma\u2019di (Latn, 584,000 speakers), Dan (Latn, 1,099,244 speakers), Nateni (Latn, 100,000 speakers), Ukrainian (Cyrl, 29,273,587 speakers), Navajo (Latn, 166,319 speakers), Lithuanian (Latn, 2,357,094 speakers), Dutch (Latn, 31,709,104 speakers), Basaa (Latn, 332,940 speakers). [code: soft-dotted]", + "status": "WARN", + "traceback": null + } + ], + "rationale": "\n An accent placed on characters with a \"soft dot\", like i or j, causes\n the dot to disappear.\n An explicit dot above can be added where required.\n See \"Diacritics on i and j\" in Section 7.1, \"Latin\" in The Unicode Standard.\n\n Characters with the Soft_Dotted property are listed in\n https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n\n See also:\n https://googlefonts.github.io/gf-guide/diacritics.html#soft-dotted-glyphs\n ", + "result": "WARN", + "severity": 3 + } + ], + "key": [ + "", + null, + null + ], + "result": { + "SKIP": 4, + "WARN": 1 + } + } + ] +} \ No newline at end of file diff --git a/docs/fontbakery-reports/yujisyuku/GoogleFonts.json b/docs/fontbakery-reports/yujisyuku/GoogleFonts.json new file mode 100644 index 00000000..85e378df --- /dev/null +++ b/docs/fontbakery-reports/yujisyuku/GoogleFonts.json @@ -0,0 +1,7 @@ +{ + "color": "green", + "label": "Google Fonts", + "logoSvg": "", + "message": "84%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/yujisyuku/ShapingChecks.json b/docs/fontbakery-reports/yujisyuku/ShapingChecks.json new file mode 100644 index 00000000..1e5a3896 --- /dev/null +++ b/docs/fontbakery-reports/yujisyuku/ShapingChecks.json @@ -0,0 +1,7 @@ +{ + "color": "red", + "label": "Shaping Checks", + "logoSvg": "", + "message": "0%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/yujisyuku/Universal.json b/docs/fontbakery-reports/yujisyuku/Universal.json new file mode 100644 index 00000000..a0c3d9c9 --- /dev/null +++ b/docs/fontbakery-reports/yujisyuku/Universal.json @@ -0,0 +1,7 @@ +{ + "color": "yellow", + "label": "Universal", + "logoSvg": "", + "message": "68%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/fontbakery-reports/yujisyuku/overall.json b/docs/fontbakery-reports/yujisyuku/overall.json new file mode 100644 index 00000000..dea349a2 --- /dev/null +++ b/docs/fontbakery-reports/yujisyuku/overall.json @@ -0,0 +1,7 @@ +{ + "color": "green", + "label": "FontBakery QA", + "logoSvg": "", + "message": "83%", + "schemaVersion": 1 +} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index dd501591..40f6b5b9 100644 --- a/docs/index.html +++ b/docs/index.html @@ -83,9 +83,9 @@
-
-

Almendra Display - link +
+

Bigshot One + link @@ -94,10 +94,10 @@

Almendra Display - + - + @@ -107,8 +107,8 @@

Almendra Display google/fonts - 1.004 - 1.004 + 1.001 + 1.001 @@ -119,10 +119,10 @@

Almendra Display - + - + @@ -132,8 +132,8 @@

Almendra Display dev - 1.004 - 1.004 + 1.001 + 1.001 @@ -144,10 +144,10 @@

Almendra Display - + - + @@ -157,8 +157,8 @@

Almendra Display sandbox - 1.004 - 1.004 + 1.001 + 1.001 @@ -169,10 +169,10 @@

Almendra Display - + - + @@ -182,8 +182,8 @@

Almendra Display production - 1.004 - 1.004 + 1.001 + 1.001 @@ -192,24 +192,24 @@

Almendra Display

-
-
+
- + - + - +
DesignerAna SanfelippoGesine Todt
Subsetslatin, latin-ext, menulatin, menu
CodepointsU+0020-U+007E, U+00A0-U+00AC, U+00AE-U+00BF, U+00C1-U+00FF, U+0127-U+0129, U+0131-U+0135, U+0137-U+0138, U+013F-U+0144, U+0152-U+0154, U+0156-U+0159, U+02C6-U+02C7, U+02DA, U+02DC, U+0307, U+03BC, U+2013-U+2014, U+2018-U+201A, U+201C-U+201E, U+2022, U+2026, U+2039-U+203A, U+20AC, U+F6C3U+0020-U+007E, U+00A0-U+00FF, U+0131, U+0152-U+0153, U+0178, U+02BC, U+02C6, U+02DA, U+02DC, U+2013-U+2014, U+2018-U+201A, U+201C-U+201E, U+2022, U+2039-U+203A, U+2044, U+2074, U+20AC, U+2212, U+2215
@@ -218,13 +218,13 @@

Almendra Display
-
-
+
@@ -253,13 +253,13 @@
Recent Commits
-
-
+
Failing tests
@@ -268,19 +268,22 @@
Failing tests
  • FAIL: Does DESCRIPTION file contain a upstream Git repo URL?
  • +
  • FAIL: DESCRIPTION.en_us.html must have more than 200 bytes. +
  • +
  • FAIL: Check Google Fonts glyph coverage.
  • FAIL: Check license file has good copyright string.
  • -
  • FAIL: Copyright notices match canonical pattern in METADATA.pb +
  • FAIL: Check copyright namerecords match license file.
  • -
  • FAIL: Copyright notices match canonical pattern in fonts +
  • FAIL: Copyright notices match canonical pattern in METADATA.pb
  • -
  • FAIL: Ensure METADATA.pb does not use escaped strings. +
  • FAIL: Copyright notices match canonical pattern in fonts
  • FAIL: OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts. @@ -302,10 +305,10 @@
    Failing tests
    - + - + @@ -315,172 +318,172 @@
    Failing tests
    FontBakery QA
    - 80% - 80% + 82% + 82% - + - - + + - - - - + + + + - Universal - Universal + Google Fonts + Google Fonts - 74% - 74% + 80% + 80% - + - - + + - - - - + + + + - Google Fonts - Google Fonts + Universal + Universal - 78% - 78% + 69% + 69%
  • -
  • Full Fontbakery report
  • +
  • Full Fontbakery report
  • -
    -

    Baloo Bhai 2 - link +
    +

    Carrois Gothic SC + link - + - - + + - + - - + + google/fonts google/fonts - 1.7 - 1.7 + 1.002 + 1.002 - + - - + + - + - - + + dev dev - 1.7 - 1.7 + 1.002 + 1.002 - + - - + + - + - - + + sandbox sandbox - 1.7 - 1.7 + 1.002 + 1.002 - + - - + + - + - - + + production production - 1.7 - 1.7 + 1.002 + 1.002 @@ -489,24 +492,24 @@

    Baloo Bhai 2

    -
    -
    +
    - + - + - +
    DesignerEk TypeCarrois Apostrophe
    Subsetsgujarati, latin, latin-ext, menu, vietnameselatin, menu
    CodepointsU+000D, U+0020-U+007F, U+00A0-U+017E, U+018F, U+0192, U+01A0-U+01A1, U+01AF-U+01B0, U+01C4-U+01DC, U+01E6-U+01E7, U+01EA-U+01EB, U+01FA-U+021B, U+022A-U+022D, U+0230-U+0233, U+0237, U+0251, U+0259, U+0261, U+02BB-U+02BC, U+02BE-U+02BF, U+02C6-U+02CC, U+02D8-U+02DD, U+0300-U+0304, U+0306-U+030C, U+030F, U+0311-U+0312, U+031B, U+0323-U+0324, U+0326-U+0328, U+032E, U+0331, U+03C0, U+0964-U+0965, U+0A81-U+0A83, U+0A85-U+0A8D, U+0A8F-U+0A91, U+0A93-U+0AA8, U+0AAA-U+0AB0, U+0AB2-U+0AB3, U+0AB5-U+0AB9, U+0ABC-U+0AC5, U+0AC7-U+0AC9, U+0ACB-U+0ACD, U+0AD0, U+0AE0-U+0AE3, U+0AE6-U+0AF1, U+0AF9, U+1E08-U+1E09, U+1E0C-U+1E0F, U+1E14-U+1E17, U+1E1C-U+1E1D, U+1E20-U+1E21, U+1E24-U+1E25, U+1E2A-U+1E2B, U+1E2E-U+1E2F, U+1E36-U+1E3B, U+1E42-U+1E49, U+1E4C-U+1E53, U+1E5A-U+1E69, U+1E6C-U+1E6F, U+1E78-U+1E7B, U+1E80-U+1E85, U+1E8E-U+1E8F, U+1E92-U+1E93, U+1E97, U+1E9E, U+1EA0-U+1EF9, U+2007-U+200D, U+2010, U+2012-U+2015, U+2018-U+201A, U+201C-U+201E, U+2020-U+2022, U+2026, U+2030, U+2032-U+2033, U+2039-U+203A, U+2044, U+2070, U+2074-U+2079, U+207D-U+2089, U+208D-U+208E, U+20A1, U+20A3-U+20A4, U+20A6-U+20A7, U+20A9-U+20AE, U+20B1-U+20B2, U+20B5, U+20B9-U+20BA, U+20BC-U+20BD, U+2113, U+2116-U+2117, U+2120, U+2122, U+2126, U+212E, U+2153-U+2154, U+215B-U+215E, U+2190-U+2193, U+2202, U+2205-U+2206, U+220F, U+2211-U+2212, U+2215, U+2219-U+221A, U+221E, U+222B, U+2248, U+2260, U+2264-U+2265, U+25A0, U+25B2-U+25B3, U+25B6-U+25B7, U+25BC-U+25BD, U+25C0-U+25C1, U+25C6, U+25CA, U+25CC, U+FB00-U+FB04U+0001-U+0009, U+0010-U+0019, U+0020-U+007E, U+00A0-U+00FF, U+0127-U+0129, U+0131-U+0135, U+0137-U+0138, U+013F-U+0144, U+0152-U+0154, U+0156-U+0159, U+0237, U+02C6-U+02C7, U+02DA, U+02DC, U+0307, U+2013-U+2014, U+2018-U+201A, U+201C-U+201E, U+2022, U+2039-U+203A, U+20AC, U+F6C3
    @@ -515,81 +518,16 @@

    Baloo Bhai 2
    - -
    -
    -
    -
    - - - - -
    Latest releases
    -
      - -
    • - v1.700 - (2 years ago) -
    • - -
    - - -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -
    +
    -
    Recent Pull Requests
    - - - -
    Recent Commits
    -
    @@ -597,25 +535,40 @@
    Recent Commits
    -
    -
    +
    Failing tests
      -
    • FAIL: METADATA.pb: Check URL on copyright string is the same as in repository_url field. +
    • FAIL: Does font file include unacceptable control character glyphs? +
    • + +
    • FAIL: Does DESCRIPTION file contain a upstream Git repo URL? +
    • + +
    • FAIL: Check Google Fonts glyph coverage. +
    • + +
    • FAIL: Check license file has good copyright string.
    • -
    • ERROR: Check accent of Lcaron, dcaron, lcaron, tcaron (derived from com.google.fonts/check/alt_caron) +
    • FAIL: Copyright notices match canonical pattern in METADATA.pb +
    • + +
    • FAIL: Copyright notices match canonical pattern in fonts
    • -
    • FAIL: Ensure dotted circle glyph is present and can attach marks. +
    • FAIL: Font enables smart dropout control in "prep" table instructions? +
    • + +
    • FAIL: Ensure METADATA.pb does not use escaped strings.
    @@ -628,12 +581,12 @@
    Failing tests
    - + - + - + @@ -641,74 +594,74 @@
    Failing tests
    FontBakery QA
    - 90% - 90% + 84% + 84% - + - - + + - - - - + + + + - Universal - Universal + Google Fonts + Google Fonts - ERRORED - ERRORED + 81% + 81% - + - - + + - - - - + + + + - Google Fonts - Google Fonts + Universal + Universal - 89% - 89% + 80% + 80%
    -
  • Full Fontbakery report
  • +
  • Full Fontbakery report
  • -
    -

    Libre Barcode 39 Text - link +
    +

    Crimson Pro + link @@ -717,10 +670,10 @@

    Libre Barcode 39 Text - + - + @@ -730,8 +683,8 @@

    Libre Barcode 39 Text google/fonts - 1.005 - 1.005 + 1.003 + 1.003 @@ -742,10 +695,10 @@

    Libre Barcode 39 Text - + - + @@ -755,8 +708,8 @@

    Libre Barcode 39 Text dev - 1.005 - 1.005 + 1.003 + 1.003 @@ -767,10 +720,10 @@

    Libre Barcode 39 Text - + - + @@ -780,8 +733,8 @@

    Libre Barcode 39 Text sandbox - 1.005 - 1.005 + 1.003 + 1.003 @@ -792,10 +745,10 @@

    Libre Barcode 39 Text - + - + @@ -805,8 +758,8 @@

    Libre Barcode 39 Text production - 1.005 - 1.005 + 1.003 + 1.003 @@ -815,24 +768,24 @@

    Libre Barcode 39 Text

    -
    -
    +
    - + - + - +
    DesignerLasse FisterJacques Le Bailly
    Subsetslatin, menulatin, latin-ext, menu, vietnamese
    CodepointsU+0000, U+000D, U+0020, U+0024-U+0025, U+002A-U+002B, U+002D-U+0039, U+0041-U+005A, U+0061-U+007A, U+00A0, U+00C2, U+200B-U+200CU+0000, U+000D, U+0020-U+007E, U+00A0-U+017E, U+018F, U+0192, U+01A0-U+01A1, U+01AF-U+01B0, U+01C4-U+01CC, U+01CF, U+01E6-U+01E7, U+01EA-U+01EB, U+01FA-U+021B, U+0226-U+0227, U+022A-U+022D, U+0230-U+0233, U+0237, U+0259, U+02B9-U+02BC, U+02BE-U+02BF, U+02C6-U+02CC, U+02D8-U+02DD, U+0300-U+0304, U+0306-U+030C, U+030F, U+0311-U+0312, U+031B, U+0323-U+0324, U+0326-U+0328, U+032E, U+0331, U+0335-U+0338, U+0394, U+03A3, U+03A9, U+03BC, U+03C0, U+1E08-U+1E09, U+1E0C-U+1E0F, U+1E14-U+1E17, U+1E1C-U+1E1D, U+1E20-U+1E21, U+1E24-U+1E25, U+1E2A-U+1E2B, U+1E2E-U+1E2F, U+1E36-U+1E37, U+1E3A-U+1E3B, U+1E42-U+1E49, U+1E4C-U+1E53, U+1E5A-U+1E5B, U+1E5E-U+1E69, U+1E6C-U+1E6F, U+1E78-U+1E7B, U+1E80-U+1E85, U+1E8E-U+1E8F, U+1E92-U+1E93, U+1E97, U+1E9E, U+1EA0-U+1EF9, U+2007-U+200B, U+2010, U+2012-U+2015, U+2018-U+201A, U+201C-U+201E, U+2020-U+2022, U+2026, U+2030, U+2032-U+2033, U+2039-U+203A, U+2044, U+2052, U+2070, U+2074-U+2079, U+2080-U+2089, U+20A1, U+20A3-U+20A4, U+20A6-U+20A7, U+20A9, U+20AB-U+20AD, U+20B1-U+20B2, U+20B5, U+20B9-U+20BA, U+20BC-U+20BD, U+2113, U+2116, U+2122, U+2126, U+212E, U+2202, U+2205-U+2206, U+220F, U+2211-U+2212, U+2215, U+2219-U+221A, U+221E, U+222B, U+2248, U+2260, U+2264-U+2265, U+25CA, U+2619, U+2767, U+27E8-U+27E9, U+F8FF, U+FB01-U+FB02
    @@ -841,17 +794,17 @@

    Libre Barcode 39 Text
    -
    -
    +
    - - -
    + + + + + + + + + + + + + + + + Build font and specimen + Build font and specimen + + + success + success + + +
    @@ -900,34 +853,16 @@
    Latest releases
    -
    -
    +
    -
    Recent Pull Requests
    - - - -
    Recent Commits
    -
    @@ -935,25 +870,22 @@
    Recent Commits
    -
    -
    +
    Failing tests
      -
    • FAIL: Check Google Fonts glyph coverage. -
    • -
    • FAIL: METADATA.pb: Check URL on copyright string is the same as in repository_url field.
    • -
    • FAIL: OS/2.fsSelection bit 7 (USE_TYPO_METRICS) is set in all fonts. +
    • FAIL: Validates that when an instance record is included for the default instance, its subfamilyNameID value is set to a name ID whose string is equal to the string of either name ID 2 or 17, and its postScriptNameID value is set to a name ID whose string is equal to the string of name ID 6.
    @@ -966,12 +898,12 @@
    Failing tests
    - + - + - + @@ -979,74 +911,74 @@
    Failing tests
    FontBakery QA
    - 88% - 88% + 90% + 90% - + - - + + - - - - + + + + - Universal - Universal + Google Fonts + Google Fonts - 86% - 86% + 90% + 90% - + - - + + - - - - + + + + - Google Fonts - Google Fonts + Universal + Universal - 86% - 86% + 85% + 85%
    -
  • Full Fontbakery report
  • +
  • Full Fontbakery report
  • -
    -

    Londrina Solid - link +
    +

    Lato + link @@ -1055,10 +987,10 @@

    Londrina Solid - + - + @@ -1068,8 +1000,8 @@

    Londrina Solid google/fonts - 1.002 - 1.002 + 2.015 + 2.015 @@ -1080,12 +1012,12 @@

    Londrina Solid - + - + - + @@ -1093,8 +1025,8 @@

    Londrina Solid dev - 1.002 - 1.002 + 1.104 + 1.104 @@ -1105,12 +1037,12 @@

    Londrina Solid - + - + - + @@ -1118,8 +1050,8 @@

    Londrina Solid sandbox - 1.002 - 1.002 + 1.104 + 1.104 @@ -1130,12 +1062,12 @@

    Londrina Solid - + - + - + @@ -1143,8 +1075,8 @@

    Londrina Solid production - 1.002 - 1.002 + 1.104 + 1.104 @@ -1153,24 +1085,24 @@

    Londrina Solid

    -
    -
    +
    - + - + - +
    DesignerMarcelo MagalhãesŁukasz Dziedzic
    Subsetslatin, menucyrillic, cyrillic-ext, greek, greek-ext, latin, latin-ext, menu, vietnamese
    CodepointsU+0000, U+000D, U+0020-U+007E, U+00A0-U+00AE, U+00B0-U+00FF, U+0133, U+0152-U+0153, U+0160-U+0161, U+0178, U+017D-U+017E, U+0192, U+02C6, U+02DC, U+2013-U+2014, U+2018-U+201A, U+201C-U+201E, U+2020-U+2022, U+2026, U+2030, U+2039-U+203A, U+20AC, U+2122, U+215B-U+215E, U+25CF, U+FB00-U+FB04U+0000, U+0020-U+007E, U+00A0-U+036F, U+0374-U+0375, U+037A-U+037E, U+0384-U+038A, U+038C, U+038E-U+03A1, U+03A3-U+03CE, U+03D0-U+0486, U+0488-U+0513, U+0E3F, U+1D00-U+1DCA, U+1DFE-U+1E9B, U+1E9E, U+1EA0-U+1EF9, U+1F00-U+1F15, U+1F18-U+1F1D, U+1F20-U+1F45, U+1F48-U+1F4D, U+1F50-U+1F57, U+1F59, U+1F5B, U+1F5D, U+1F5F-U+1F7D, U+1F80-U+1FB4, U+1FB6-U+1FC4, U+1FC6-U+1FD3, U+1FD6-U+1FDB, U+1FDD-U+1FEF, U+1FF2-U+1FF4, U+1FF6-U+1FFE, U+2000-U+2010, U+2012-U+2022, U+2026, U+202F-U+2030, U+2032-U+2034, U+2039-U+203A, U+203C-U+203E, U+2044, U+205E-U+205F, U+2070-U+2071, U+2074-U+2094, U+20A0-U+20B5, U+20B8-U+20BA, U+20DD, U+2105, U+2113, U+2116-U+2117, U+2120, U+2122, U+2126, U+212E, U+2132, U+214D-U+214E, U+2153-U+215F, U+2183-U+2184, U+2190-U+2199, U+21A8, U+2202, U+220F, U+2211-U+2212, U+2215, U+2219-U+221A, U+221E-U+221F, U+2229, U+222B, U+2248, U+2260-U+2261, U+2264-U+2265, U+2302, U+2310, U+2320-U+2321, U+2460-U+2473, U+24EA-U+24F4, U+24FF-U+2500, U+2502, U+250C, U+2510, U+2514, U+2518, U+25A1, U+25AA-U+25AB, U+25CA-U+25CC, U+25CF, U+25E6, U+2600, U+263C, U+2669, U+2776-U+277F, U+2C60-U+2C6C, U+2C74-U+2C77, U+2E17, U+A717-U+A71A, U+A720-U+A721, U+F8FF, U+FB00-U+FB04, U+FE20-U+FE23, U+FEFF
    @@ -1179,73 +1111,16 @@

    Londrina Solid
    - -
    -
    -
    -
    - - - - -
    Latest releases
    - - - -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -
    +
    -
    Recent Pull Requests
    - - - -
    Recent Commits
    -
    @@ -1253,28 +1128,25 @@
    Recent Commits
    -
    -
    +
    Failing tests
      -
    • FAIL: Does DESCRIPTION file contain broken links? -
    • -
    • FAIL: Does DESCRIPTION file contain a upstream Git repo URL?
    • -
    • FAIL: Check Google Fonts glyph coverage. +
    • FAIL: Check license file has good copyright string.
    • -
    • FAIL: Check license file has good copyright string. +
    • FAIL: Check copyright namerecords match license file.
    • FAIL: Copyright notices match canonical pattern in METADATA.pb @@ -1286,16 +1158,19 @@
      Failing tests
    • FAIL: METADATA.pb: Check URL on copyright string is the same as in repository_url field.
    • -
    • FAIL: PPEM must be an integer on hinted fonts. +
    • FAIL: Ensure METADATA.pb does not use escaped strings.
    • -
    • FAIL: Ensure METADATA.pb does not use escaped strings. +
    • FAIL: Name table records must not have trailing spaces.
    • -
    • FAIL: Font contains '.notdef' as its first glyph? +
    • FAIL: Ensure component transforms do not perform scaling or rotation. +
    • + +
    • FAIL: Fonts have consistent underline thickness?
    • -
    • FAIL: Check if each glyph has the recommended amount of contours. +
    • FAIL: Check name table IDs 1, 2, 16, 17 to conform to Italic style.
    @@ -1308,10 +1183,10 @@
    Failing tests
    - + - + @@ -1321,172 +1196,172 @@
    Failing tests
    FontBakery QA
    - 83% - 83% + 79% + 79% - + - - + + - - - - + + + + - Universal - Universal + Google Fonts + Google Fonts - 77% - 77% + 79% + 79% - + - - + + - - - - + + + + - Google Fonts - Google Fonts + Universal + Universal - 80% - 80% + 68% + 68%
    -
  • Full Fontbakery report
  • +
  • Full Fontbakery report
  • -
    -

    Shrikhand - link +
    +

    Lovers Quarrel + link - + - - + + - + - - + + google/fonts google/fonts - 1.001 - 1.001 + 1.01 + 1.01 - + - - + + - + - - + + dev dev - 1.001 - 1.001 + 1.01 + 1.01 - + - - + + - + - - + + sandbox sandbox - 1.001 - 1.001 + 1.01 + 1.01 - + - - + + - + - - + + production production - 1.001 - 1.001 + 1.01 + 1.01 @@ -1495,24 +1370,24 @@

    Shrikhand

    -
    -
    +
    - + - + - +
    DesignerJonny PinhornRobert Leuschke
    Subsetsgujarati, latin, latin-ext, menulatin, latin-ext, menu, vietnamese
    CodepointsU+0020-U+007E, U+00A0-U+0107, U+010C-U+0113, U+0116-U+011B, U+011E-U+011F, U+0122-U+0123, U+012A-U+012B, U+012E-U+0131, U+0136-U+0137, U+0139-U+013E, U+0141-U+0148, U+014C-U+014D, U+0150-U+015B, U+015E-U+0165, U+016A-U+016B, U+016E-U+0173, U+0178-U+017E, U+0192, U+0218-U+0219, U+02C6-U+02C7, U+02C9, U+02D8-U+02DD, U+03C0, U+0964-U+0965, U+0A81-U+0A83, U+0A85-U+0A8D, U+0A8F-U+0A91, U+0A93-U+0AA8, U+0AAA-U+0AB0, U+0AB2-U+0AB3, U+0AB5-U+0AB9, U+0ABC-U+0AC5, U+0AC7-U+0AC9, U+0ACB-U+0ACD, U+0AD0, U+0AE0-U+0AE3, U+0AE6-U+0AF1, U+200C-U+200D, U+2013-U+2014, U+2018-U+201A, U+201C-U+201E, U+2020-U+2022, U+2026, U+2030, U+2039-U+203A, U+2044, U+2070, U+2074, U+20AC, U+20B9-U+20BA, U+20BD, U+2113, U+2122, U+2126, U+212E, U+2202, U+2206, U+220F, U+2211-U+2212, U+2215, U+2219-U+221A, U+221E, U+222B, U+2248, U+2260, U+2264-U+2265, U+25CA, U+25CC, U+FB01-U+FB02U+000D, U+0020-U+007E, U+00A0-U+0107, U+010C-U+0113, U+0116-U+011B, U+0122-U+0123, U+0127-U+012B, U+012E-U+012F, U+0131-U+0148, U+014A-U+014D, U+0150-U+015B, U+015E-U+016B, U+016E-U+017E, U+0192, U+01A0-U+01A1, U+01AF-U+01B0, U+0237, U+02C6-U+02C7, U+02D8-U+02DD, U+0300-U+0304, U+0306-U+030C, U+0312, U+031B, U+0323, U+0326-U+0328, U+03A9, U+03BC, U+03C0, U+1E80-U+1E85, U+1E9E, U+1EA0-U+1EF9, U+2013-U+2014, U+2018-U+201A, U+201C-U+201E, U+2020-U+2022, U+2026, U+2030, U+2039-U+203A, U+2044, U+2074, U+20AC, U+2122, U+2202, U+2206, U+220F, U+2211-U+2212, U+2215, U+221A, U+221E, U+222B, U+2248, U+2260, U+2264-U+2265, U+25CA, U+F8FF, U+FB01-U+FB02
    @@ -1521,13 +1396,47 @@

    Shrikhand
    - +
    +
    +
    +
    + + + + +
    Latest releases
    +
      + +
    + + +
    + +
    +
    +
    +
    + +
    +
    +
    +
    -
    +
    @@ -1556,13 +1465,13 @@
    Recent Commits
    -
    -
    +
    Failing tests
    @@ -1571,34 +1480,13 @@
    Failing tests
  • FAIL: Check Google Fonts glyph coverage.
  • -
  • FAIL: Check license file has good copyright string. -
  • - -
  • FAIL: Copyright notices match canonical pattern in METADATA.pb -
  • - -
  • FAIL: Copyright notices match canonical pattern in fonts -
  • - -
  • FAIL: METADATA.pb: Font styles are named canonically? +
  • FAIL: Check OFL body text is correct.
  • -
  • FAIL: Font enables smart dropout control in "prep" table instructions? -
  • - -
  • FAIL: PPEM must be an integer on hinted fonts. -
  • - -
  • FAIL: METADATA.pb: Designers are listed correctly on the Google Fonts catalog? -
  • - -
  • FAIL: Space and non-breaking space have the same width? -
  • - -
  • FAIL: Checking post.italicAngle value. (derived from com.google.fonts/check/italic_angle) +
  • FAIL: METADATA.pb: Check URL on copyright string is the same as in repository_url field.
  • -
  • FAIL: Ensure dotted circle glyph is present and can attach marks. +
  • FAIL: Ensure component transforms do not perform scaling or rotation.
  • @@ -1611,10 +1499,10 @@
    Failing tests
    - + - + @@ -1624,74 +1512,74 @@
    Failing tests
    FontBakery QA
    - 79% - 79% + 87% + 87% - + - - + + - - - - + + + + - Universal - Universal + Google Fonts + Google Fonts - 74% - 74% + 87% + 87% - + - - + + - - - - + + + + - Google Fonts - Google Fonts + Universal + Universal - 79% - 79% + 76% + 76%
    -
  • Full Fontbakery report
  • +
  • Full Fontbakery report
  • -
    -

    Xanh Mono - link +
    +

    Yuji Syuku + link @@ -1700,10 +1588,10 @@

    Xanh Mono - + - + @@ -1713,8 +1601,8 @@

    Xanh Mono google/fonts - 3.101 - 3.101 + 3.002 + 3.002 @@ -1725,10 +1613,10 @@

    Xanh Mono - + - + @@ -1738,8 +1626,8 @@

    Xanh Mono dev - 3.101 - 3.101 + 3.002 + 3.002 @@ -1750,10 +1638,10 @@

    Xanh Mono - + - + @@ -1763,8 +1651,8 @@

    Xanh Mono sandbox - 3.101 - 3.101 + 3.002 + 3.002 @@ -1775,10 +1663,10 @@

    Xanh Mono - + - + @@ -1788,8 +1676,8 @@

    Xanh Mono production - 3.101 - 3.101 + 3.002 + 3.002 @@ -1798,24 +1686,24 @@

    Xanh Mono

    -
    -
    +
    - + - + - +
    DesignerYellow Type, Lâm Bảo, Duy DaoKinuta Font Factory
    Subsetslatin, latin-ext, menu, vietnamesecyrillic, japanese, latin, latin-ext, menu
    CodepointsU+000D, U+0020-U+007E, U+00A0-U+0107, U+010A-U+0113, U+0116-U+011B, U+011E-U+0123, U+0126-U+012B, U+012E-U+0131, U+0136-U+0137, U+0139-U+013E, U+0141-U+0148, U+014A-U+014D, U+0150-U+015B, U+015E-U+016B, U+016E-U+017E, U+01A0-U+01A1, U+01AF-U+01B0, U+0218-U+021B, U+02C6, U+02DA, U+02DC, U+0300-U+0304, U+0306-U+030C, U+0312, U+031B, U+0323, U+0326-U+0328, U+1E80-U+1E85, U+1E9E, U+1EA0-U+1EF9, U+2013-U+2014, U+2018-U+201A, U+201C-U+201E, U+2020-U+2022, U+2026, U+2030, U+2039-U+203A, U+2044, U+2070, U+2074-U+2079, U+2080-U+2089, U+20AC, U+2122, U+215B-U+215E, U+2212, U+2215, U+2248, U+2260, U+2264-U+2265, U+25CAU+0020-U+007E, U+00A0-U+00FF, U+0131, U+0141-U+0142, U+0152-U+0153, U+0160-U+0161, U+0178, U+017D-U+017E, U+0192, U+02C6, U+02DA, U+02DC, U+0301, U+0305-U+0308, U+030B-U+030C, U+0328, U+0391-U+03A1, U+03A3-U+03A9, U+03B1-U+03C1, U+03C3-U+03C9, U+0401, U+0410-U+044F, U+0451, U+2002, U+2013-U+2016, U+2018-U+201A, U+201C-U+201E, U+2020-U+2022, U+2025-U+2026, U+2030, U+2039-U+203B, U+2044, U+205A, U+205D, U+2074, U+20AC, U+2103, U+2109-U+210A, U+2113, U+2116, U+2121-U+2122, U+212B, U+213B, U+2160-U+216B, U+2170-U+217B, U+217F, U+2190-U+2193, U+21C4-U+21C6, U+21E6-U+21E9, U+2212, U+2215, U+2312, U+23A7-U+23A9, U+23AB-U+23AD, U+2460-U+2490, U+249C-U+24B5, U+24EA, U+2500-U+254B, U+2550, U+255E, U+2561, U+256A, U+256D-U+2573, U+2581-U+258F, U+2594-U+2595, U+25A0-U+25A2, U+25B2-U+25B3, U+25B7, U+25BC-U+25BD, U+25C1, U+25C6-U+25C7, U+25C9, U+25CB, U+25CE-U+25CF, U+25E2-U+25E5, U+25EF, U+2600-U+2603, U+2605-U+2606, U+260E, U+261C-U+261F, U+2640, U+2642, U+2660-U+2667, U+266A, U+266D, U+266F, U+2776-U+277E, U+27A1, U+2B05-U+2B07, U+3000-U+3015, U+301D, U+301F-U+3020, U+3036, U+3041-U+3096, U+309B-U+309E, U+30A1-U+30FE, U+322A-U+3243, U+3251-U+325B, U+3291-U+3294, U+3296, U+3298-U+3299, U+329D-U+329E, U+32A4-U+32B0, U+3300, U+3303, U+3305, U+330D, U+3314-U+3316, U+3318, U+331E, U+3322-U+3323, U+3326-U+3327, U+332A-U+332B, U+3331, U+3333, U+3336, U+3339, U+333B, U+3342, U+3347, U+3349-U+334A, U+334D-U+334E, U+3351, U+3357, U+337B-U+337F, U+3385-U+3389, U+338E-U+3390, U+3396-U+3398, U+339C-U+33A6, U+33B0-U+33B3, U+33C4, U+33C8, U+33CB-U+33CD, U+33D4, U+3D4E, U+4E00-U+4E01, U+4E03, U+4E07-U+4E0B, U+4E0D-U+4E0E, U+4E10-U+4E11, U+4E14-U+4E19, U+4E1E, U+4E21, U+4E26, U+4E28, U+4E2A, U+4E2D, U+4E31-U+4E32, U+4E36, U+4E38-U+4E39, U+4E3B-U+4E3C, U+4E3F, U+4E42-U+4E43, U+4E45, U+4E4B, U+4E4D-U+4E4F, U+4E55-U+4E59, U+4E5D-U+4E5F, U+4E62, U+4E71, U+4E73, U+4E7E, U+4E80, U+4E82, U+4E85-U+4E86, U+4E88-U+4E8C, U+4E8E, U+4E91-U+4E92, U+4E94-U+4E95, U+4E98-U+4E99, U+4E9B-U+4E9C, U+4E9E-U+4EA2, U+4EA4-U+4EA6, U+4EA8, U+4EAB-U+4EAE, U+4EB0, U+4EB3, U+4EB6, U+4EBA, U+4EC0-U+4EC2, U+4EC4, U+4EC6-U+4EC7, U+4ECA-U+4ECB, U+4ECD-U+4ECF, U+4ED4-U+4ED9, U+4EDD-U+4EDF, U+4EE1, U+4EE3-U+4EE5, U+4EED-U+4EEE, U+4EF0, U+4EF2, U+4EF6-U+4EF7, U+4EFB-U+4EFC, U+4F00-U+4F01, U+4F03, U+4F09-U+4F0A, U+4F0D-U+4F11, U+4F1A, U+4F1C-U+4F1D, U+4F2F-U+4F30, U+4F34, U+4F36, U+4F38-U+4F3A, U+4F3C-U+4F3D, U+4F43, U+4F46-U+4F47, U+4F4D-U+4F51, U+4F53, U+4F55-U+4F57, U+4F59-U+4F5E, U+4F69, U+4F6F-U+4F70, U+4F73, U+4F75-U+4F76, U+4F7B-U+4F7C, U+4F7F, U+4F83, U+4F86, U+4F88, U+4F8A-U+4F8B, U+4F8D, U+4F8F, U+4F91-U+4F92, U+4F94, U+4F96, U+4F98, U+4F9A-U+4F9B, U+4F9D, U+4FA0-U+4FA1, U+4FAB, U+4FAD-U+4FAF, U+4FB5-U+4FB6, U+4FBF, U+4FC2-U+4FC4, U+4FC9-U+4FCA, U+4FCD-U+4FCE, U+4FD0-U+4FD1, U+4FD4, U+4FD7-U+4FD8, U+4FDA-U+4FDB, U+4FDD, U+4FDF-U+4FE1, U+4FE3-U+4FE5, U+4FEE-U+4FEF, U+4FF1, U+4FF3, U+4FF5-U+4FF6, U+4FF8, U+4FFA, U+4FFE-U+4FFF, U+5005-U+5006, U+5009, U+500B, U+500D, U+500F, U+5011-U+5012, U+5014, U+5016, U+5019-U+501A, U+501E-U+501F, U+5021-U+5026, U+5028-U+502D, U+5036, U+5039, U+5040, U+5042-U+5043, U+5046-U+5049, U+504F-U+5050, U+5055-U+5056, U+505A, U+505C, U+5065, U+506C, U+5070, U+5072, U+5074-U+5076, U+5078, U+507D, U+5080, U+5085, U+508D, U+5091, U+5094, U+5098-U+509A, U+50AC-U+50AD, U+50B2-U+50B5, U+50B7, U+50BE, U+50C2, U+50C5, U+50C9-U+50CA, U+50CD, U+50CF, U+50D1, U+50D5-U+50D6, U+50D8, U+50DA, U+50DE, U+50E3, U+50E5, U+50E7, U+50ED-U+50EE, U+50F4-U+50F5, U+50F9, U+50FB, U+5100-U+5102, U+5104, U+5109, U+5112, U+5114-U+5116, U+5118, U+511A, U+511F, U+5121, U+512A, U+5132, U+5137, U+513A-U+513C, U+513F-U+5141, U+5143-U+514E, U+5150, U+5152, U+5154, U+515A, U+515C, U+5162, U+5164-U+5165, U+5168-U+516E, U+5171, U+5175-U+5178, U+517C, U+5180, U+5182, U+5185-U+5186, U+5189-U+518A, U+518C-U+518D, U+518F-U+5193, U+5195-U+5197, U+5199, U+519D, U+51A0, U+51A2, U+51A4-U+51A6, U+51A8-U+51AC, U+51B0-U+51B7, U+51BD-U+51BE, U+51C4-U+51C6, U+51C9, U+51CB-U+51CD, U+51D6, U+51DB-U+51DD, U+51E0-U+51E1, U+51E6-U+51E7, U+51E9-U+51EA, U+51EC-U+51ED, U+51F0-U+51F1, U+51F5-U+51F6, U+51F8-U+51FA, U+51FD-U+51FE, U+5200, U+5203-U+5204, U+5206-U+5208, U+520A-U+520B, U+520E, U+5211, U+5214-U+5215, U+5217, U+521D, U+5224-U+5225, U+5227, U+5229-U+522A, U+522E, U+5230, U+5233, U+5236-U+523B, U+5243-U+5244, U+5247, U+524A-U+524D, U+524F, U+5254, U+5256, U+525B, U+525D-U+525E, U+5263-U+5265, U+5269-U+526A, U+526F-U+5275, U+527D, U+527F, U+5283, U+5287-U+5289, U+528D, U+5291-U+5292, U+5294, U+529B-U+529C, U+529F-U+52A0, U+52A3, U+52A6, U+52A9-U+52AD, U+52AF, U+52B1, U+52B4-U+52B5, U+52B9, U+52BC, U+52BE, U+52C0-U+52C1, U+52C3, U+52C5, U+52C7, U+52C9, U+52CD, U+52D2, U+52D5, U+52D7-U+52D9, U+52DB, U+52DD-U+52E0, U+52E2-U+52E4, U+52E6-U+52E7, U+52F2-U+52F3, U+52F5, U+52F8-U+52FA, U+52FE-U+5302, U+5305-U+5308, U+530D, U+530F-U+5310, U+5315-U+5317, U+5319-U+531A, U+531D, U+5320-U+5321, U+5323-U+5324, U+532A, U+532F, U+5331, U+5333, U+5338-U+533B, U+533F-U+5341, U+5343, U+5345-U+534A, U+534D, U+5351-U+5354, U+5357-U+5358, U+535A, U+535C, U+535E, U+5360, U+5366, U+5369, U+536E-U+5375, U+5377-U+5378, U+537B, U+537D, U+537F, U+5382, U+5384, U+5393, U+5396, U+5398, U+539A, U+539F-U+53A0, U+53A5-U+53A6, U+53A8-U+53A9, U+53AD-U+53AE, U+53B0, U+53B2-U+53B3, U+53B6, U+53BB, U+53C2-U+53C3, U+53C8-U+53CE, U+53D4, U+53D6-U+53D7, U+53D9, U+53DB, U+53DD, U+53DF, U+53E1-U+53E5, U+53E8-U+53F3, U+53F6-U+53F8, U+53FA, U+5401, U+5403-U+5404, U+5408-U+5411, U+541B, U+541D-U+5420, U+5426, U+5429, U+542B-U+542E, U+5436, U+5438-U+5439, U+543B-U+543E, U+5440, U+5442, U+5446, U+5448-U+544A, U+544E, U+5451, U+545F, U+5468, U+546A, U+5470-U+5471, U+5473, U+5475-U+5477, U+547B-U+547D, U+5480, U+5484, U+5486, U+548A-U+548C, U+548E-U+5490, U+5492, U+549C, U+54A2, U+54A4-U+54A5, U+54A8-U+54A9, U+54AB-U+54AC, U+54AF, U+54B2-U+54B3, U+54B8, U+54BC-U+54BE, U+54C0-U+54C2, U+54C4, U+54C7-U+54C9, U+54D8, U+54E1-U+54E2, U+54E5-U+54E6, U+54E8-U+54E9, U+54ED-U+54EE, U+54F2, U+54FA, U+54FD, U+54FF, U+5504, U+5506-U+5507, U+550F-U+5510, U+5514, U+5516, U+552E-U+552F, U+5531, U+5533, U+5538-U+5539, U+553E, U+5540, U+5544-U+5546, U+554C, U+554F, U+5553, U+5556-U+5557, U+555C-U+555E, U+5563, U+557B-U+557C, U+557E, U+5580, U+5583-U+5584, U+5586-U+5587, U+5589-U+558B, U+5598-U+559A, U+559C-U+559F, U+55A7-U+55AC, U+55AE, U+55B0, U+55B6, U+55C4-U+55C5, U+55C7, U+55D4, U+55DA, U+55DC, U+55DF, U+55E3-U+55E4, U+55F7, U+55F9, U+55FD-U+55FE, U+5606, U+5609, U+5614, U+5616-U+5618, U+561B, U+5629, U+562F, U+5631-U+5632, U+5634, U+5636, U+5638, U+5642, U+564C, U+564E, U+5650, U+5653, U+565B, U+5664, U+5668, U+566A-U+566C, U+5674, U+5678, U+567A, U+5680, U+5686-U+5687, U+568A, U+568F, U+5694, U+5699, U+56A0, U+56A2, U+56A5, U+56AE, U+56B4, U+56B6, U+56BC, U+56C0-U+56C3, U+56C8, U+56CA, U+56CE, U+56D1, U+56D3, U+56D7-U+56D8, U+56DA-U+56DB, U+56DE, U+56E0, U+56E3, U+56EE, U+56F0, U+56F2-U+56F3, U+56F9-U+56FA, U+56FD, U+56FF-U+5700, U+5703-U+5704, U+5708-U+5709, U+570B, U+570D, U+570F, U+5712-U+5713, U+5716, U+5718, U+571C, U+571F, U+5726-U+5728, U+572D, U+5730, U+5737-U+5738, U+573B, U+5740, U+5742, U+5747, U+574A, U+574E-U+5751, U+5759, U+5761, U+5764-U+5766, U+5769-U+576A, U+577F, U+5782, U+5788-U+5789, U+578B, U+5793, U+57A0, U+57A2-U+57A4, U+57AA, U+57AC, U+57B0, U+57B3, U+57C0, U+57C3, U+57C6-U+57C8, U+57CB, U+57CE, U+57D2-U+57D4, U+57D6, U+57DC, U+57DF-U+57E0, U+57E3, U+57F4, U+57F7, U+57F9-U+57FA, U+57FC, U+5800, U+5802, U+5805-U+5806, U+580A-U+580B, U+5815, U+5819, U+581D, U+5821, U+5824, U+582A, U+582F-U+5831, U+5834-U+5835, U+583A, U+583D, U+5840-U+5841, U+584A-U+584B, U+5851-U+5852, U+5854, U+5857-U+585A, U+585E, U+5861-U+5862, U+5869, U+586B, U+5870, U+5872, U+5875, U+5879, U+587E, U+5883, U+5885, U+5893, U+5897, U+589C, U+589E-U+589F, U+58A8, U+58AB, U+58AE, U+58B2-U+58B3, U+58B8-U+58BB, U+58BE, U+58C1, U+58C5, U+58C7, U+58CA, U+58CC, U+58D1, U+58D3, U+58D5, U+58D7-U+58D9, U+58DC, U+58DE-U+58DF, U+58E4-U+58E5, U+58EB-U+58EC, U+58EE-U+58F2, U+58F7, U+58F9-U+58FD, U+5902, U+5909-U+590B, U+590F-U+5910, U+5915-U+5916, U+5918-U+591C, U+5922, U+5925, U+5927, U+5929-U+592E, U+5931-U+5932, U+5937-U+5938, U+593E, U+5944, U+5947-U+5949, U+594E-U+5951, U+5953-U+5955, U+5957-U+5958, U+595A-U+595B, U+595D, U+5960, U+5962-U+5963, U+5965, U+5967-U+596A, U+596C, U+596E, U+5973-U+5974, U+5978, U+597D, U+5981-U+5984, U+598A, U+598D, U+5993, U+5996, U+5999, U+599B, U+599D, U+59A3-U+59A5, U+59A8, U+59AC, U+59B2, U+59B9-U+59BB, U+59BE, U+59C6, U+59C9, U+59CB, U+59D0-U+59D1, U+59D3-U+59D4, U+59D9-U+59DA, U+59DC, U+59E5-U+59E6, U+59E8, U+59EA-U+59EB, U+59F6, U+59F8, U+59FB, U+59FF, U+5A01, U+5A03, U+5A09, U+5A11, U+5A18, U+5A1A, U+5A1C, U+5A1F-U+5A20, U+5A25, U+5A29, U+5A2F, U+5A35-U+5A36, U+5A3C, U+5A40-U+5A41, U+5A46, U+5A49, U+5A5A, U+5A62, U+5A66, U+5A6A, U+5A6C, U+5A7F, U+5A92, U+5A9A-U+5A9B, U+5ABC-U+5ABE, U+5AC1-U+5AC2, U+5AC9, U+5ACB-U+5ACC, U+5AD0, U+5AD6-U+5AD7, U+5AE1, U+5AE3, U+5AE6, U+5AE9, U+5AFA-U+5AFB, U+5B09, U+5B0B-U+5B0C, U+5B16, U+5B22, U+5B2A, U+5B2C, U+5B30, U+5B32, U+5B36, U+5B3E, U+5B40, U+5B43, U+5B45, U+5B50-U+5B51, U+5B54-U+5B58, U+5B5A-U+5B5D, U+5B5F, U+5B63-U+5B66, U+5B69, U+5B6B, U+5B70-U+5B71, U+5B73, U+5B75, U+5B78, U+5B7A, U+5B80, U+5B83, U+5B85, U+5B87-U+5B89, U+5B8B-U+5B8D, U+5B8F, U+5B95, U+5B97-U+5B9D, U+5B9F, U+5BA2-U+5BA6, U+5BAE, U+5BB0, U+5BB3-U+5BB6, U+5BB8-U+5BB9, U+5BBF-U+5BC0, U+5BC2-U+5BC7, U+5BC9, U+5BCC, U+5BD0, U+5BD2-U+5BD4, U+5BD8, U+5BDB, U+5BDD-U+5BDF, U+5BE1-U+5BE2, U+5BE4-U+5BE9, U+5BEB-U+5BEC, U+5BEE, U+5BF0, U+5BF3, U+5BF5-U+5BF6, U+5BF8, U+5BFA, U+5BFE-U+5BFF, U+5C01-U+5C02, U+5C04-U+5C0B, U+5C0D-U+5C0F, U+5C11, U+5C13, U+5C16, U+5C1A, U+5C1E, U+5C20, U+5C22, U+5C24, U+5C28, U+5C2D, U+5C31, U+5C38-U+5C41, U+5C45-U+5C46, U+5C48, U+5C4A-U+5C4B, U+5C4D-U+5C51, U+5C53, U+5C55, U+5C5B, U+5C5E, U+5C60-U+5C62, U+5C64-U+5C65, U+5C6C, U+5C6E-U+5C6F, U+5C71, U+5C76, U+5C79, U+5C8C, U+5C90-U+5C91, U+5C94, U+5CA1, U+5CA6, U+5CA8-U+5CA9, U+5CAB-U+5CAC, U+5CB1, U+5CB3, U+5CB6-U+5CB8, U+5CBA-U+5CBC, U+5CBE, U+5CC5, U+5CC7, U+5CD9, U+5CE0-U+5CE1, U+5CE8-U+5CEA, U+5CED, U+5CEF-U+5CF0, U+5CF5-U+5CF6, U+5CFA-U+5CFB, U+5CFD, U+5D07, U+5D0B, U+5D0E, U+5D11, U+5D14-U+5D1B, U+5D1F, U+5D22, U+5D27, U+5D29, U+5D42, U+5D4B-U+5D4C, U+5D4E, U+5D50, U+5D52-U+5D53, U+5D5C, U+5D69, U+5D6C-U+5D6D, U+5D6F, U+5D73, U+5D76, U+5D82, U+5D84, U+5D87, U+5D8B-U+5D8C, U+5D90, U+5D9D, U+5DA2, U+5DAC, U+5DAE, U+5DB7-U+5DBA, U+5DBC-U+5DBD, U+5DC9, U+5DCC-U+5DCD, U+5DD0, U+5DD2-U+5DD3, U+5DD6, U+5DDB, U+5DDD-U+5DDE, U+5DE1-U+5DE3, U+5DE5-U+5DE8, U+5DEB, U+5DEE, U+5DF1-U+5DF5, U+5DF7, U+5DFB, U+5DFD-U+5DFE, U+5E02-U+5E03, U+5E06, U+5E0B-U+5E0C, U+5E11, U+5E16, U+5E19-U+5E1B, U+5E1D, U+5E25, U+5E2B, U+5E2D, U+5E2F-U+5E30, U+5E33, U+5E36-U+5E38, U+5E3D, U+5E40, U+5E43-U+5E45, U+5E47, U+5E4C, U+5E4E, U+5E54-U+5E55, U+5E57, U+5E5F, U+5E61-U+5E64, U+5E72-U+5E7F, U+5E81, U+5E83-U+5E84, U+5E87, U+5E8A, U+5E8F, U+5E95-U+5E97, U+5E9A, U+5E9C, U+5EA0, U+5EA6-U+5EA7, U+5EAB, U+5EAD, U+5EB5-U+5EB8, U+5EC1-U+5EC3, U+5EC8-U+5ECA, U+5ECF-U+5ED0, U+5ED3, U+5ED6, U+5EDA-U+5EDB, U+5EDD, U+5EDF-U+5EE3, U+5EE8-U+5EE9, U+5EEC, U+5EF0-U+5EF1, U+5EF3-U+5EF4, U+5EF6-U+5EF8, U+5EFA-U+5EFC, U+5EFE-U+5EFF, U+5F01, U+5F03-U+5F04, U+5F09-U+5F0D, U+5F0F-U+5F11, U+5F13-U+5F18, U+5F1B, U+5F1F, U+5F21, U+5F25-U+5F27, U+5F29, U+5F2D, U+5F2F, U+5F31, U+5F34-U+5F35, U+5F37-U+5F38, U+5F3C, U+5F3E, U+5F41, U+5F45, U+5F48, U+5F4A, U+5F4C, U+5F4E, U+5F51, U+5F53, U+5F56-U+5F57, U+5F59, U+5F5C-U+5F5D, U+5F61-U+5F62, U+5F66-U+5F67, U+5F69-U+5F6D, U+5F70-U+5F71, U+5F73, U+5F77, U+5F79, U+5F7C, U+5F7F-U+5F85, U+5F87-U+5F88, U+5F8A-U+5F8C, U+5F90-U+5F93, U+5F97-U+5F99, U+5F9E, U+5FA0-U+5FA1, U+5FA8-U+5FAA, U+5FAD-U+5FAE, U+5FB3-U+5FB5, U+5FB7, U+5FB9, U+5FBC-U+5FBD, U+5FC3, U+5FC5, U+5FCC-U+5FCD, U+5FD6-U+5FD9, U+5FDC-U+5FDE, U+5FE0, U+5FE4, U+5FEB, U+5FF0-U+5FF1, U+5FF5, U+5FF8, U+5FFB, U+5FFD, U+5FFF, U+600E-U+6010, U+6012, U+6015-U+6016, U+6019, U+601B-U+601D, U+6020-U+6021, U+6025-U+602B, U+602F, U+6031, U+603A, U+6041-U+6043, U+6046, U+604A-U+604B, U+604D, U+6050, U+6052, U+6055, U+6059-U+605A, U+605D, U+605F-U+6060, U+6062-U+6065, U+6068-U+606D, U+606F-U+6070, U+6075, U+6077, U+6081, U+6083-U+6085, U+6089-U+608D, U+6092, U+6094, U+6096-U+6097, U+609A-U+609B, U+609F-U+60A0, U+60A3, U+60A6-U+60A7, U+60A9-U+60AA, U+60B2-U+60B6, U+60B8, U+60BC-U+60BD, U+60C5-U+60C7, U+60D1, U+60D3, U+60D5, U+60D8, U+60DA, U+60DC, U+60DE-U+60E1, U+60E3, U+60E7-U+60E8, U+60F0-U+60F4, U+60F6-U+60F7, U+60F9-U+60FB, U+6100-U+6101, U+6103, U+6106, U+6108-U+6109, U+610D-U+610F, U+6111, U+6115, U+611A-U+611B, U+611F-U+6121, U+6127-U+6128, U+612C, U+6130, U+6134, U+6137, U+613C-U+613F, U+6142, U+6144, U+6147-U+6148, U+614A-U+614E, U+6153, U+6155, U+6158-U+615A, U+615D, U+615F, U+6162-U+6163, U+6165, U+6167-U+6168, U+616B, U+616E-U+6171, U+6173-U+6177, U+617E, U+6182, U+6187, U+618A, U+618E, U+6190-U+6191, U+6194, U+6196, U+6198-U+619A, U+61A4, U+61A7, U+61A9, U+61AB-U+61AC, U+61AE, U+61B2, U+61B6, U+61BA, U+61BE, U+61C3, U+61C6-U+61CD, U+61D0, U+61E3, U+61E6, U+61F2, U+61F4, U+61F6-U+61F8, U+61FA, U+61FC-U+6200, U+6208-U+620A, U+620C-U+620E, U+6210-U+6214, U+6216, U+621A-U+621B, U+621D-U+621F, U+6221, U+6226, U+622A, U+622E-U+6230, U+6232-U+6234, U+6238, U+623B, U+623F-U+6241, U+6247-U+6249, U+624B, U+624D-U+624E, U+6253, U+6255, U+6258, U+625B, U+625E, U+6260, U+6263, U+6268, U+626E, U+6271, U+6276, U+6279, U+627C, U+627E-U+6280, U+6282-U+6284, U+6289-U+628A, U+6291-U+6298, U+629B-U+629C, U+629E, U+62A6, U+62AB-U+62AC, U+62B1, U+62B5, U+62B9, U+62BB-U+62BD, U+62C2, U+62C5-U+62CA, U+62CC-U+62CD, U+62CF-U+62D4, U+62D7-U+62D9, U+62DB-U+62DD, U+62E0-U+62E1, U+62EC-U+62EF, U+62F1, U+62F3, U+62F5-U+62F7, U+62FE-U+62FF, U+6301-U+6302, U+6307-U+6309, U+630C, U+6311, U+6319, U+631F, U+6327-U+6328, U+632B, U+632F, U+633A, U+633D-U+633F, U+6349, U+634C-U+634D, U+634F-U+6350, U+6355, U+6357, U+635C, U+6367-U+6369, U+636B, U+636E, U+6372, U+6376-U+6377, U+637A-U+637B, U+6380, U+6383, U+6388-U+6389, U+638C, U+638E-U+638F, U+6392, U+6396, U+6398, U+639B, U+639F-U+63A3, U+63A5, U+63A7-U+63AC, U+63B2, U+63B4-U+63B5, U+63BB, U+63BE, U+63C0, U+63C3-U+63C4, U+63C6, U+63C9, U+63CF-U+63D0, U+63D2, U+63D6, U+63DA-U+63DB, U+63E1, U+63E3, U+63E9, U+63ED-U+63EE, U+63F4-U+63F6, U+63FA, U+6406, U+640D, U+640F, U+6413-U+6414, U+6416-U+6417, U+641C, U+6426, U+6428, U+642C-U+642D, U+6434, U+6436, U+643A, U+643E, U+6442, U+644E, U+6451, U+6458, U+6460, U+6467, U+6469, U+646F, U+6476, U+6478, U+647A, U+6483, U+6488, U+6492-U+6493, U+6495, U+649A, U+649D-U+649E, U+64A4-U+64A5, U+64A9, U+64AB, U+64AD-U+64AE, U+64B0, U+64B2, U+64B9, U+64BB-U+64BC, U+64C1-U+64C2, U+64C5, U+64C7, U+64CA, U+64CD-U+64CE, U+64D2, U+64D4, U+64D8, U+64DA, U+64E0-U+64E3, U+64E6-U+64E7, U+64EC, U+64EF, U+64F1-U+64F2, U+64F4, U+64F6, U+64FA, U+64FD-U+64FE, U+6500, U+6505, U+6518, U+651C-U+651D, U+6522-U+6524, U+652A-U+652C, U+652F, U+6534-U+6539, U+653B, U+653E-U+653F, U+6545, U+6548, U+654D-U+654F, U+6551, U+6555-U+6559, U+655D-U+655E, U+6562-U+6563, U+6566, U+656C, U+6570, U+6572, U+6574-U+6575, U+6577-U+6578, U+6582-U+6583, U+6587-U+6589, U+658C, U+658E, U+6590-U+6591, U+6597, U+6599, U+659B-U+659C, U+659F, U+65A1, U+65A4-U+65A5, U+65A7, U+65AB-U+65AD, U+65AF-U+65B0, U+65B7, U+65B9, U+65BC-U+65BD, U+65C1, U+65C3-U+65C6, U+65CB-U+65CC, U+65CF, U+65D2, U+65D7, U+65D9, U+65DB, U+65E0-U+65E2, U+65E5-U+65E9, U+65EC-U+65ED, U+65F1, U+65FA-U+65FB, U+6600, U+6602-U+6603, U+6606-U+6607, U+6609-U+660A, U+660C, U+660E-U+660F, U+6613-U+6615, U+661C, U+661E-U+6620, U+6624-U+6625, U+6627-U+6628, U+662D-U+662F, U+6631, U+6634-U+6636, U+663B-U+663C, U+663F, U+6641-U+6644, U+6649, U+664B, U+664F, U+6652, U+6657, U+6659-U+665A, U+665D-U+665F, U+6662, U+6664-U+6669, U+666E-U+6670, U+6673-U+6674, U+6676, U+667A, U+6681, U+6683-U+6684, U+6687-U+6689, U+668E, U+6691, U+6696-U+6699, U+669D, U+66A0, U+66A2, U+66A6, U+66AB, U+66AE, U+66B2, U+66B4, U+66B8-U+66B9, U+66BC, U+66BE-U+66BF, U+66C1, U+66C4, U+66C6-U+66C7, U+66C9, U+66D6, U+66D9-U+66DA, U+66DC-U+66DD, U+66E0, U+66E6, U+66E9, U+66F0, U+66F2-U+66F5, U+66F7-U+6700, U+6703, U+6708-U+6709, U+670B, U+670D-U+670F, U+6714-U+6717, U+671B, U+671D-U+671F, U+6726-U+6728, U+672A-U+672E, U+6731, U+6734, U+6736-U+6738, U+673A, U+673D, U+673F, U+6741, U+6746, U+6749, U+674E-U+6751, U+6753, U+6756, U+6759, U+675C, U+675E-U+6766, U+676A, U+676D, U+676F-U+6773, U+6775, U+6777, U+677C, U+677E-U+677F, U+6785, U+6787, U+6789, U+678B-U+678C, U+6790, U+6795, U+6797, U+679A, U+679C-U+679D, U+67A0-U+67A2, U+67A6, U+67A9, U+67AF, U+67B3-U+67B4, U+67B6-U+67B9, U+67BB, U+67C0-U+67C1, U+67C4, U+67C6, U+67CA, U+67CE-U+67D1, U+67D3-U+67D4, U+67D8, U+67DA, U+67DD-U+67DE, U+67E2, U+67E4, U+67E7, U+67E9, U+67EC, U+67EE-U+67EF, U+67F1, U+67F3-U+67F5, U+67FA-U+67FB, U+67FE-U+67FF, U+6801-U+6805, U+6813, U+6816-U+6817, U+681E, U+6821-U+6822, U+6829-U+682B, U+6832, U+6834, U+6838-U+6839, U+683C-U+683D, U+6840-U+6844, U+6846, U+6848, U+684D-U+684E, U+6850-U+6854, U+6859, U+685C-U+685D, U+685F, U+6863, U+6867, U+6874, U+6876-U+6877, U+687E-U+687F, U+6881, U+6883, U+6885, U+688D-U+688F, U+6893-U+6894, U+6897, U+689B, U+689D, U+689F-U+68A0, U+68A2, U+68A6-U+68A8, U+68AD, U+68AF-U+68B1, U+68B3, U+68B5-U+68B6, U+68B9-U+68BA, U+68BC, U+68C4, U+68C6, U+68C8-U+68CB, U+68CD, U+68CF, U+68D2, U+68D4-U+68D5, U+68D7-U+68D8, U+68DA, U+68DF-U+68E1, U+68E3, U+68E7, U+68EE-U+68EF, U+68F2, U+68F9-U+68FA, U+6900-U+6901, U+6904-U+6905, U+6908, U+690B-U+690F, U+6912, U+6919-U+691C, U+6921-U+6923, U+6925-U+6926, U+6928, U+692A, U+6930, U+6934, U+6936, U+6939, U+693D, U+693F, U+694A, U+6953-U+6955, U+6959-U+695A, U+695C-U+695E, U+6960-U+6962, U+6968, U+696A-U+696B, U+696D-U+696F, U+6973-U+6975, U+6977-U+6979, U+697C-U+697E, U+6981-U+6982, U+698A, U+698E, U+6991, U+6994-U+6995, U+6998, U+699B-U+699C, U+69A0, U+69A7, U+69AE, U+69B1-U+69B2, U+69B4, U+69BB, U+69BE-U+69BF, U+69C1, U+69C3, U+69C7, U+69CA-U+69CE, U+69D0, U+69D3, U+69D8-U+69D9, U+69DD-U+69DE, U+69E2, U+69E7-U+69E8, U+69EB, U+69ED, U+69F2, U+69F9, U+69FB, U+69FD, U+69FF, U+6A02, U+6A05, U+6A0A-U+6A0C, U+6A12-U+6A14, U+6A17, U+6A19, U+6A1B, U+6A1E-U+6A1F, U+6A21-U+6A23, U+6A29-U+6A2B, U+6A2E, U+6A30, U+6A35-U+6A36, U+6A38-U+6A3A, U+6A3D, U+6A44, U+6A46-U+6A48, U+6A4B, U+6A58-U+6A59, U+6A5F, U+6A61-U+6A62, U+6A66, U+6A6B, U+6A72-U+6A73, U+6A78, U+6A7E-U+6A80, U+6A84, U+6A8D-U+6A8E, U+6A90, U+6A97, U+6A9C, U+6AA0, U+6AA2-U+6AA3, U+6AAA, U+6AAC, U+6AAE, U+6AB3, U+6AB8, U+6ABB, U+6AC1-U+6AC3, U+6AD1, U+6AD3, U+6ADA-U+6ADB, U+6ADE-U+6ADF, U+6AE2, U+6AE4, U+6AE8, U+6AEA, U+6AFA-U+6AFB, U+6B04-U+6B05, U+6B0A, U+6B12, U+6B16, U+6B1D, U+6B1F-U+6B21, U+6B23, U+6B27, U+6B32, U+6B37-U+6B3A, U+6B3D-U+6B3E, U+6B43, U+6B47, U+6B49, U+6B4C, U+6B4E, U+6B50, U+6B53-U+6B54, U+6B59, U+6B5B, U+6B5F, U+6B61-U+6B66, U+6B69-U+6B6A, U+6B6F, U+6B73-U+6B74, U+6B77-U+6B79, U+6B7B, U+6B7F-U+6B80, U+6B83-U+6B84, U+6B86, U+6B89-U+6B8B, U+6B8D, U+6B95-U+6B96, U+6B98, U+6B9E, U+6BA4, U+6BAA-U+6BAB, U+6BAF, U+6BB1-U+6BB5, U+6BB7, U+6BBA-U+6BBC, U+6BBF-U+6BC0, U+6BC5-U+6BC6, U+6BCB, U+6BCD-U+6BCF, U+6BD2-U+6BD4, U+6BD6, U+6BD8, U+6BDB, U+6BDF, U+6BEB-U+6BEC, U+6BEF, U+6BF3, U+6C08, U+6C0F, U+6C11, U+6C13-U+6C14, U+6C17, U+6C1B, U+6C23-U+6C24, U+6C34, U+6C37-U+6C38, U+6C3E-U+6C42, U+6C4E, U+6C50, U+6C55, U+6C57, U+6C5A, U+6C5C-U+6C60, U+6C62, U+6C68, U+6C6A, U+6C6F-U+6C70, U+6C72-U+6C73, U+6C7A, U+6C7D-U+6C7E, U+6C81-U+6C83, U+6C86, U+6C88, U+6C8C-U+6C8D, U+6C90, U+6C92-U+6C93, U+6C96, U+6C99-U+6C9B, U+6CA1-U+6CA2, U+6CAB, U+6CAE, U+6CB1, U+6CB3, U+6CB8-U+6CBF, U+6CC1, U+6CC4-U+6CC5, U+6CC9-U+6CCA, U+6CCC, U+6CD3, U+6CD5, U+6CD7, U+6CD9-U+6CDB, U+6CDD, U+6CE1-U+6CE3, U+6CE5, U+6CE8, U+6CEA, U+6CEF-U+6CF1, U+6CF3, U+6D04, U+6D0B-U+6D0C, U+6D12, U+6D17, U+6D19, U+6D1B, U+6D1E-U+6D1F, U+6D25, U+6D29-U+6D2B, U+6D32-U+6D33, U+6D35-U+6D36, U+6D38, U+6D3B, U+6D3D-U+6D3E, U+6D41, U+6D44-U+6D45, U+6D59-U+6D5A, U+6D5C, U+6D63-U+6D64, U+6D66, U+6D69-U+6D6A, U+6D6C, U+6D6E-U+6D6F, U+6D74, U+6D77-U+6D79, U+6D85, U+6D87-U+6D89, U+6D8C, U+6D8E, U+6D93, U+6D95-U+6D96, U+6D99, U+6D9B-U+6D9C, U+6DAC, U+6DAF, U+6DB2, U+6DB5, U+6DB8, U+6DBC, U+6DC0, U+6DC5-U+6DC7, U+6DCB-U+6DCC, U+6DCF, U+6DD1-U+6DD2, U+6DD5, U+6DD8-U+6DDA, U+6DDE, U+6DE1, U+6DE4, U+6DE6, U+6DE8, U+6DEA-U+6DEC, U+6DEE, U+6DF1-U+6DF3, U+6DF5, U+6DF7-U+6DFC, U+6E05, U+6E07-U+6E0B, U+6E13, U+6E15, U+6E19-U+6E1B, U+6E1D, U+6E1F-U+6E21, U+6E23-U+6E27, U+6E29, U+6E2B-U+6E2F, U+6E34, U+6E38-U+6E3A, U+6E3C, U+6E3E, U+6E43, U+6E4A, U+6E4D-U+6E4E, U+6E56, U+6E58, U+6E5B-U+6E5C, U+6E5F, U+6E67, U+6E6B, U+6E6E-U+6E6F, U+6E72, U+6E76, U+6E7E-U+6E80, U+6E82, U+6E8C, U+6E8F-U+6E90, U+6E96, U+6E98, U+6E9C-U+6E9D, U+6E9F, U+6EA2, U+6EA5, U+6EAA-U+6EAB, U+6EAF, U+6EB2, U+6EB6-U+6EB7, U+6EBA, U+6EBD, U+6EBF, U+6EC2, U+6EC4-U+6EC5, U+6EC9, U+6ECB-U+6ECC, U+6ED1, U+6ED3-U+6ED5, U+6EDD-U+6EDE, U+6EEC, U+6EEF, U+6EF2, U+6EF4, U+6EF7-U+6EF8, U+6EFE-U+6EFF, U+6F01-U+6F02, U+6F06, U+6F09, U+6F0F, U+6F11, U+6F13-U+6F15, U+6F20, U+6F22-U+6F23, U+6F2B-U+6F2C, U+6F31-U+6F32, U+6F38, U+6F3E-U+6F3F, U+6F41, U+6F45, U+6F51, U+6F54, U+6F58, U+6F5B-U+6F5C, U+6F5F, U+6F64, U+6F66, U+6F6D-U+6F70, U+6F74, U+6F78, U+6F7A, U+6F7C, U+6F80-U+6F82, U+6F84, U+6F86, U+6F88, U+6F8E, U+6F91, U+6F97, U+6FA1, U+6FA3-U+6FA4, U+6FAA, U+6FB1, U+6FB3, U+6FB5, U+6FB9, U+6FC0-U+6FC3, U+6FC6, U+6FD4-U+6FD5, U+6FD8, U+6FDB, U+6FDF-U+6FE1, U+6FE4, U+6FEB-U+6FEC, U+6FEE-U+6FEF, U+6FF1, U+6FF3, U+6FF5-U+6FF6, U+6FFA, U+6FFE, U+7001, U+7005-U+7007, U+7009, U+700B, U+700F, U+7011, U+7015, U+7018, U+701A-U+701B, U+701D-U+701F, U+7026-U+7028, U+702C, U+7030, U+7032, U+703E, U+704C, U+7051, U+7058, U+7063, U+706B, U+706F-U+7070, U+7078, U+707C-U+707D, U+7085, U+7089-U+708A, U+708E, U+7092, U+7099, U+70AB-U+70AF, U+70B3, U+70B8-U+70BB, U+70C8, U+70CB, U+70CF, U+70D9, U+70DD, U+70DF, U+70F1, U+70F9, U+70FD, U+7104, U+7109, U+710F, U+7114, U+7119-U+711A, U+711C, U+7121, U+7126, U+7130, U+7136, U+713C, U+7146-U+7147, U+7149, U+714C, U+714E, U+7155-U+7156, U+7159, U+715C, U+7162, U+7164-U+7167, U+7169, U+716C, U+716E, U+717D, U+7184, U+7188, U+718A, U+718F, U+7194-U+7195, U+7199, U+719F, U+71A8, U+71AC, U+71B1, U+71B9, U+71BE, U+71C1, U+71C3, U+71C8-U+71C9, U+71CE, U+71D0, U+71D2, U+71D4-U+71D5, U+71D7, U+71DF-U+71E0, U+71E5-U+71E7, U+71EC-U+71EE, U+71F5, U+71F9, U+71FB-U+71FC, U+71FE-U+71FF, U+7206, U+720D, U+7210, U+721B, U+7228, U+722A, U+722C-U+722D, U+7230, U+7232, U+7235-U+7236, U+723A-U+7240, U+7246-U+7248, U+724B-U+724C, U+7252, U+7258-U+7259, U+725B, U+725D, U+725F, U+7261-U+7262, U+7267, U+7269, U+7272, U+7274, U+7279, U+727D-U+727E, U+7280-U+7282, U+7287, U+7292, U+7296, U+72A0, U+72A2, U+72A7, U+72AC, U+72AF, U+72B1-U+72B2, U+72B6, U+72B9, U+72BE, U+72C0, U+72C2-U+72C4, U+72C6, U+72CE, U+72D0, U+72D2, U+72D7, U+72D9, U+72DB, U+72E0-U+72E2, U+72E9, U+72EC-U+72ED, U+72F7-U+72F9, U+72FC-U+72FD, U+730A, U+7316-U+7317, U+731B-U+731D, U+731F, U+7324-U+7325, U+7329-U+732B, U+732E-U+732F, U+7334, U+7336-U+7337, U+733E-U+733F, U+7344-U+7345, U+734E-U+734F, U+7357, U+7363, U+7368, U+736A, U+7370, U+7372, U+7375, U+7377-U+7378, U+737A-U+737B, U+7384, U+7387, U+7389, U+738B, U+7396, U+73A9, U+73B2-U+73B3, U+73BB, U+73BD, U+73C0, U+73C2, U+73C8-U+73CA, U+73CD-U+73CE, U+73D2, U+73D6, U+73DE, U+73E0, U+73E3, U+73E5, U+73EA, U+73ED-U+73EE, U+73F1, U+73F5, U+73F8, U+73FE, U+7403, U+7405-U+7407, U+7409, U+7422, U+7425-U+7426, U+7429-U+742A, U+742E, U+7432-U+7436, U+743A, U+743F, U+7441, U+7455, U+7459-U+745C, U+745E-U+7460, U+7462-U+7464, U+7469-U+746A, U+746F-U+7470, U+7473, U+7476, U+747E, U+7483, U+7489, U+748B, U+749E-U+749F, U+74A2, U+74A7, U+74B0, U+74BD, U+74CA, U+74CF, U+74D4, U+74DC, U+74E0, U+74E2-U+74E3, U+74E6-U+74E7, U+74E9, U+74EE, U+74F0-U+74F2, U+74F6-U+74F8, U+7501, U+7503-U+7505, U+750C-U+750E, U+7511, U+7513, U+7515, U+7518, U+751A, U+751C, U+751E-U+751F, U+7523, U+7525-U+7526, U+7528, U+752B-U+752C, U+752F-U+7533, U+7537-U+7538, U+753A-U+753C, U+7544, U+7546, U+7549-U+754D, U+754F, U+7551, U+7554, U+7559-U+755D, U+7560, U+7562, U+7564-U+7567, U+7569-U+756B, U+756D, U+756F-U+7570, U+7573-U+7574, U+7576-U+7578, U+757F, U+7582, U+7586-U+7587, U+7589-U+758B, U+758E-U+758F, U+7591, U+7594, U+759A, U+759D, U+75A3, U+75A5, U+75AB, U+75B1-U+75B3, U+75B5, U+75B8-U+75B9, U+75BC-U+75BE, U+75C2-U+75C3, U+75C5, U+75C7, U+75CA, U+75CD, U+75D2, U+75D4-U+75D5, U+75D8-U+75D9, U+75DB, U+75DE, U+75E2-U+75E3, U+75E9, U+75F0, U+75F2-U+75F4, U+75FA, U+75FC, U+75FE-U+75FF, U+7601, U+7609, U+760B, U+760D, U+761F-U+7622, U+7624, U+7626-U+7627, U+7630, U+7634, U+763B, U+7642, U+7646-U+7648, U+764C, U+7652, U+7656, U+7658, U+765C, U+7661-U+7662, U+7667-U+766A, U+766C, U+7670, U+7672, U+7676, U+7678, U+767A-U+767E, U+7680, U+7682-U+7684, U+7686-U+7688, U+768B, U+768E, U+7690, U+7693, U+7696, U+7699-U+769C, U+769E, U+76A6, U+76AE, U+76B0, U+76B4, U+76B7-U+76BA, U+76BF, U+76C2-U+76C3, U+76C6, U+76C8, U+76CA, U+76CD, U+76D2, U+76D6-U+76D7, U+76DB-U+76DC, U+76DE-U+76DF, U+76E1, U+76E3-U+76E5, U+76E7, U+76EA, U+76EE, U+76F2, U+76F4, U+76F8, U+76FB, U+76FE, U+7701, U+7704, U+7707-U+7709, U+770B-U+770C, U+771B, U+771E-U+7720, U+7724-U+7726, U+7729, U+7737-U+7738, U+773A, U+773C, U+7740, U+7746-U+7747, U+775A-U+775B, U+7761-U+7763, U+7765-U+7766, U+7768, U+776B, U+7779, U+777E-U+777F, U+778B, U+778E, U+7791, U+779E, U+77A0, U+77A5, U+77AC-U+77AD, U+77B0, U+77B3, U+77B6, U+77B9, U+77BB-U+77BD, U+77BF, U+77C7, U+77CD, U+77D7, U+77DA-U+77DC, U+77E2-U+77E3, U+77E5, U+77E7, U+77E9, U+77ED-U+77EF, U+77F3, U+77FC, U+7802, U+780C, U+7812, U+7814-U+7815, U+7820-U+7821, U+7825-U+7827, U+7832, U+7834, U+783A, U+783F, U+7845, U+784E, U+785D, U+7864, U+786B-U+786C, U+786F, U+7872, U+7874, U+787A, U+787C, U+7881, U+7886-U+7887, U+788C-U+788E, U+7891, U+7893, U+7895, U+7897, U+789A, U+78A3, U+78A7, U+78A9-U+78AA, U+78AF, U+78B5, U+78BA, U+78BC, U+78BE, U+78C1, U+78C5-U+78C6, U+78CA-U+78CB, U+78D0-U+78D1, U+78D4, U+78DA, U+78E7-U+78E8, U+78EC, U+78EF, U+78F4, U+78FD, U+7901, U+7907, U+790E, U+7911-U+7912, U+7919, U+7926, U+792A-U+792C, U+7930, U+793A, U+793C, U+793E, U+7940-U+7941, U+7947-U+7949, U+7950, U+7953, U+7955-U+7957, U+795A, U+795D-U+7960, U+7962, U+7965, U+7968, U+796D, U+7977, U+797A, U+797F-U+7981, U+7984-U+7985, U+798A, U+798D-U+798F, U+7994, U+799B, U+799D, U+79A6-U+79A7, U+79AA, U+79AE, U+79B0-U+79B1, U+79B3, U+79B9-U+79BA, U+79BD-U+79C1, U+79C9, U+79CB, U+79D1-U+79D2, U+79D5, U+79D8, U+79DF, U+79E1, U+79E3-U+79E4, U+79E6-U+79E7, U+79E9, U+79EC, U+79F0, U+79FB, U+7A00, U+7A08, U+7A0B, U+7A0D-U+7A0E, U+7A14, U+7A17-U+7A1A, U+7A1C, U+7A1F-U+7A20, U+7A2E, U+7A31-U+7A32, U+7A37, U+7A3B-U+7A40, U+7A42-U+7A43, U+7A46, U+7A49, U+7A4D-U+7A50, U+7A57, U+7A61-U+7A63, U+7A69, U+7A6B, U+7A70, U+7A74, U+7A76, U+7A79-U+7A7A, U+7A7D, U+7A7F, U+7A81, U+7A83-U+7A84, U+7A88, U+7A92-U+7A93, U+7A95-U+7A98, U+7A9F, U+7AA9-U+7AAA, U+7AAE-U+7AB0, U+7AB6, U+7ABA, U+7ABF, U+7AC3-U+7AC5, U+7AC7-U+7AC8, U+7ACA-U+7ACB, U+7ACD, U+7ACF, U+7AD1-U+7AD3, U+7AD5, U+7AD9-U+7ADA, U+7ADC-U+7ADD, U+7ADF-U+7AE3, U+7AE5-U+7AE7, U+7AEA-U+7AEB, U+7AED, U+7AEF-U+7AF0, U+7AF6, U+7AF8-U+7AFA, U+7AFF, U+7B02, U+7B04, U+7B06, U+7B08, U+7B0A-U+7B0B, U+7B0F, U+7B11, U+7B18-U+7B19, U+7B1B, U+7B1E, U+7B20, U+7B25-U+7B26, U+7B28, U+7B2C, U+7B33, U+7B35-U+7B36, U+7B39, U+7B45-U+7B46, U+7B48-U+7B49, U+7B4B-U+7B4D, U+7B4F-U+7B52, U+7B54, U+7B56, U+7B5D, U+7B65, U+7B67, U+7B6C, U+7B6E, U+7B70-U+7B71, U+7B74-U+7B75, U+7B7A, U+7B86-U+7B87, U+7B8B, U+7B8D, U+7B8F, U+7B92, U+7B94-U+7B95, U+7B97-U+7B9A, U+7B9C-U+7B9F, U+7BA1, U+7BAA, U+7BAD, U+7BB1, U+7BB4, U+7BB8, U+7BC0-U+7BC1, U+7BC4, U+7BC6-U+7BC7, U+7BC9, U+7BCB-U+7BCC, U+7BCF, U+7BDD, U+7BE0, U+7BE4-U+7BE6, U+7BE9, U+7BED, U+7BF3, U+7BF6-U+7BF7, U+7C00, U+7C07, U+7C0D, U+7C11-U+7C14, U+7C17, U+7C1E-U+7C1F, U+7C21, U+7C23, U+7C27, U+7C2A-U+7C2B, U+7C37-U+7C38, U+7C3D-U+7C40, U+7C43, U+7C4C-U+7C4D, U+7C4F-U+7C50, U+7C54, U+7C56, U+7C58, U+7C5F-U+7C60, U+7C64-U+7C65, U+7C6C, U+7C73, U+7C75, U+7C7E, U+7C81-U+7C83, U+7C89, U+7C8B, U+7C8D, U+7C90, U+7C92, U+7C95, U+7C97-U+7C98, U+7C9B, U+7C9F, U+7CA1-U+7CA2, U+7CA4-U+7CA5, U+7CA7-U+7CA8, U+7CAB, U+7CAD-U+7CAE, U+7CB1-U+7CB3, U+7CB9, U+7CBD-U+7CBE, U+7CC0, U+7CC2, U+7CC5, U+7CCA, U+7CCE, U+7CD2, U+7CD6, U+7CD8, U+7CDC, U+7CDE-U+7CE0, U+7CE2, U+7CE7, U+7CEF, U+7CF2, U+7CF4, U+7CF6, U+7CF8, U+7CFA-U+7CFB, U+7CFE, U+7D00, U+7D02, U+7D04-U+7D06, U+7D0A-U+7D0B, U+7D0D, U+7D10, U+7D14-U+7D15, U+7D17-U+7D1C, U+7D20-U+7D22, U+7D2B-U+7D2C, U+7D2E-U+7D30, U+7D32-U+7D33, U+7D35, U+7D39-U+7D3A, U+7D3F, U+7D42-U+7D46, U+7D48, U+7D4B-U+7D4C, U+7D4E-U+7D50, U+7D56, U+7D5B-U+7D5C, U+7D5E, U+7D61-U+7D63, U+7D66, U+7D68, U+7D6E, U+7D71-U+7D73, U+7D75-U+7D76, U+7D79, U+7D7D, U+7D89, U+7D8F, U+7D93, U+7D99-U+7D9C, U+7D9F-U+7DA0, U+7DA2-U+7DA3, U+7DAB-U+7DB2, U+7DB4-U+7DB5, U+7DB7-U+7DB8, U+7DBA-U+7DBB, U+7DBD-U+7DBF, U+7DC7, U+7DCA-U+7DCB, U+7DCF, U+7DD1-U+7DD2, U+7DD5-U+7DD6, U+7DD8, U+7DDA, U+7DDC-U+7DDE, U+7DE0-U+7DE1, U+7DE3-U+7DE4, U+7DE8-U+7DE9, U+7DEC, U+7DEF, U+7DF2, U+7DF4, U+7DFB, U+7E01, U+7E04-U+7E05, U+7E09-U+7E0B, U+7E12, U+7E1B, U+7E1E-U+7E1F, U+7E21-U+7E23, U+7E26, U+7E2B, U+7E2E, U+7E31-U+7E32, U+7E35, U+7E37, U+7E39-U+7E3B, U+7E3D-U+7E3E, U+7E41, U+7E43, U+7E46, U+7E4A-U+7E4B, U+7E4D, U+7E52, U+7E54-U+7E56, U+7E59-U+7E5A, U+7E5D-U+7E5E, U+7E61, U+7E66-U+7E67, U+7E69-U+7E6B, U+7E6D, U+7E70, U+7E79, U+7E7B-U+7E7D, U+7E7F, U+7E82-U+7E83, U+7E88-U+7E8A, U+7E8C, U+7E8E-U+7E90, U+7E92-U+7E94, U+7E96, U+7E9B-U+7E9C, U+7F36, U+7F38, U+7F3A, U+7F45, U+7F47, U+7F4C-U+7F4E, U+7F50-U+7F51, U+7F54-U+7F55, U+7F58, U+7F5F-U+7F60, U+7F67-U+7F6B, U+7F6E, U+7F70, U+7F72, U+7F75, U+7F77-U+7F79, U+7F82-U+7F83, U+7F85-U+7F88, U+7F8A, U+7F8C, U+7F8E, U+7F94, U+7F9A, U+7F9D-U+7F9E, U+7FA1, U+7FA3-U+7FA4, U+7FA8-U+7FA9, U+7FAE-U+7FAF, U+7FB2, U+7FB6, U+7FB8-U+7FB9, U+7FBD, U+7FC1, U+7FC5-U+7FC6, U+7FCA, U+7FCC, U+7FD2, U+7FD4-U+7FD5, U+7FE0-U+7FE1, U+7FE6, U+7FE9, U+7FEB, U+7FF0, U+7FF3, U+7FF9, U+7FFB-U+7FFC, U+8000-U+8001, U+8003-U+8006, U+800B-U+800C, U+8010, U+8012, U+8015, U+8017-U+8019, U+801C, U+8021, U+8028, U+8033, U+8036, U+803B, U+803D, U+803F, U+8046, U+804A, U+8052, U+8056, U+8058, U+805A, U+805E-U+805F, U+8061-U+8062, U+8068, U+806F-U+8070, U+8072-U+8074, U+8076-U+8077, U+8079, U+807D-U+807F, U+8084-U+8087, U+8089, U+808B-U+808C, U+8093, U+8096, U+8098, U+809A-U+809B, U+809D, U+80A1-U+80A2, U+80A5, U+80A9-U+80AA, U+80AC-U+80AD, U+80AF, U+80B1-U+80B2, U+80B4, U+80BA, U+80C3-U+80C4, U+80C6, U+80CC, U+80CE, U+80D6, U+80D9-U+80DB, U+80DD-U+80DE, U+80E1, U+80E4-U+80E5, U+80EF, U+80F1, U+80F4, U+80F8, U+80FC-U+80FD, U+8102, U+8105-U+810A, U+811A-U+811B, U+8123, U+8129, U+812F, U+8131, U+8133, U+8139, U+813E, U+8146, U+814B, U+814E, U+8150-U+8151, U+8153-U+8155, U+815F, U+8165-U+8166, U+816B, U+816E, U+8170-U+8171, U+8174, U+8178-U+817A, U+817F-U+8180, U+8182-U+8183, U+8188, U+818A, U+818F, U+8193, U+8195, U+819A, U+819C-U+819D, U+81A0, U+81A3-U+81A4, U+81A8-U+81A9, U+81B0, U+81B3, U+81B5, U+81B8, U+81BA, U+81BD-U+81C0, U+81C2, U+81C6, U+81C8-U+81C9, U+81CD, U+81D1, U+81D3, U+81D8-U+81DA, U+81DF-U+81E0, U+81E3, U+81E5, U+81E7-U+81E8, U+81EA, U+81ED, U+81F3-U+81F4, U+81FA-U+81FC, U+81FE, U+8201-U+8202, U+8205, U+8207-U+820A, U+820C-U+820E, U+8210, U+8212, U+8216-U+8218, U+821B-U+821C, U+821E-U+821F, U+8229-U+822C, U+822E, U+8233, U+8235-U+8239, U+8240, U+8247, U+8258-U+825A, U+825D, U+825F, U+8262, U+8264, U+8266, U+8268, U+826A-U+826B, U+826E-U+826F, U+8271-U+8272, U+8276-U+8278, U+827E, U+828B, U+828D, U+8292, U+8299, U+829D, U+829F, U+82A5-U+82A6, U+82AB-U+82AD, U+82AF, U+82B1, U+82B3, U+82B8-U+82B9, U+82BB, U+82BD, U+82C5, U+82D1-U+82D4, U+82D7, U+82D9, U+82DB-U+82DC, U+82DE-U+82DF, U+82E1, U+82E3, U+82E5-U+82E7, U+82EB, U+82F1, U+82F3-U+82F4, U+82F9-U+82FB, U+8301-U+8306, U+8309, U+830E, U+8316-U+8318, U+831C, U+8323, U+8328, U+832B, U+832F, U+8331-U+8332, U+8334-U+8336, U+8338-U+8339, U+8340, U+8345-U+8346, U+8349-U+834A, U+834F-U+8350, U+8352, U+8358, U+8362, U+8373, U+8375, U+8377, U+837B-U+837C, U+837F, U+8385, U+8387, U+8389-U+838A, U+838E, U+8393, U+8396, U+839A, U+839E-U+83A0, U+83A2, U+83A8, U+83AA-U+83AB, U+83B1, U+83B5, U+83BD, U+83C1, U+83C5, U+83C7, U+83CA, U+83CC, U+83CE, U+83D3, U+83D6, U+83D8, U+83DC, U+83DF-U+83E0, U+83E9, U+83EB, U+83EF-U+83F2, U+83F4, U+83F6-U+83F7, U+83FB, U+83FD, U+8403-U+8404, U+8407, U+840A-U+840E, U+8413, U+8420, U+8422, U+8429-U+842A, U+842C, U+8431, U+8435, U+8438, U+843C-U+843D, U+8446, U+8448-U+8449, U+844E, U+8457, U+845B, U+8461-U+8463, U+8466, U+8469, U+846B-U+846F, U+8471, U+8475, U+8477, U+8479-U+847A, U+8482, U+8484, U+848B, U+8490, U+8494, U+8499, U+849C, U+849F, U+84A1, U+84AD, U+84B2, U+84B4, U+84B8-U+84B9, U+84BB-U+84BC, U+84BF, U+84C1, U+84C4, U+84C6, U+84C9-U+84CB, U+84CD, U+84D0-U+84D1, U+84D6, U+84D9-U+84DA, U+84DC, U+84EC, U+84EE, U+84F4, U+84FC, U+84FF-U+8500, U+8506, U+8511, U+8513-U+8515, U+8517-U+8518, U+851A, U+851F, U+8521, U+8523, U+8526, U+852C-U+852D, U+8535, U+853D-U+853E, U+8540-U+8541, U+8543, U+8548-U+854B, U+854E, U+8553, U+8555, U+8557-U+855A, U+8563, U+8568-U+856B, U+856D, U+8577, U+857E, U+8580, U+8584, U+8587-U+8588, U+858A, U+8590-U+8591, U+8594, U+8597, U+8599, U+859B-U+859C, U+85A4, U+85A6, U+85A8-U+85AC, U+85AE-U+85B0, U+85B9-U+85BA, U+85C1, U+85C9, U+85CD, U+85CF-U+85D0, U+85D5, U+85DC-U+85DD, U+85E4-U+85E5, U+85E9-U+85EA, U+85F7, U+85F9-U+85FB, U+85FE, U+8602, U+8606-U+8607, U+860A-U+860B, U+8613, U+8616-U+8617, U+861A, U+8622, U+862D, U+862F-U+8630, U+863F, U+864D-U+864E, U+8650, U+8654-U+8655, U+865A-U+865C, U+865E-U+865F, U+8667, U+866B, U+8671, U+8679, U+867B, U+868A-U+868C, U+8693, U+8695, U+86A3-U+86A4, U+86A9-U+86AB, U+86AF-U+86B0, U+86B6, U+86C4, U+86C6-U+86C7, U+86C9, U+86CB, U+86CD-U+86CE, U+86D4, U+86D9, U+86DB, U+86DE-U+86DF, U+86E4, U+86E9, U+86EC-U+86EF, U+86F8-U+86F9, U+86FB, U+86FE, U+8700, U+8702-U+8703, U+8706, U+8708-U+870A, U+870D, U+8711-U+8712, U+8718, U+871A, U+871C, U+8725, U+8729, U+8734, U+8737, U+873B, U+873F, U+8749, U+874B-U+874C, U+874E, U+8753, U+8755, U+8757, U+8759, U+875F-U+8760, U+8763, U+8766, U+8768, U+876A, U+876E, U+8774, U+8776, U+8778, U+877F, U+8782, U+878D, U+879F, U+87A2, U+87AB, U+87AF, U+87B3, U+87BA-U+87BB, U+87BD, U+87C0, U+87C4, U+87C6-U+87C7, U+87CB, U+87D0, U+87D2, U+87E0, U+87EC, U+87EF, U+87F2, U+87F6-U+87F7, U+87F9, U+87FB, U+87FE, U+8805, U+8807, U+880D-U+880F, U+8811, U+8815-U+8816, U+881F, U+8821-U+8823, U+8827, U+8831, U+8836, U+8839, U+883B, U+8840, U+8842, U+8844, U+8846, U+884C-U+884D, U+8852-U+8853, U+8857, U+8859, U+885B, U+885D-U+885E, U+8861-U+8863, U+8868, U+886B, U+8870, U+8872, U+8875, U+8877, U+887D-U+887F, U+8881-U+8882, U+8888, U+888B, U+888D, U+8892, U+8896-U+8897, U+8899, U+889E, U+88A2, U+88A4, U+88AB, U+88AE, U+88B0-U+88B1, U+88B4-U+88B5, U+88B7, U+88BF, U+88C1-U+88C5, U+88CF, U+88D4-U+88D5, U+88D8-U+88D9, U+88DC-U+88DD, U+88DF, U+88E1, U+88E8, U+88F2-U+88F5, U+88F8-U+88F9, U+88FC-U+88FE, U+8902, U+8904, U+8907, U+890A, U+890C, U+8910, U+8912-U+8913, U+891C-U+891E, U+8925, U+892A-U+892B, U+8936, U+8938, U+893B, U+8941, U+8943-U+8944, U+894C-U+894D, U+8956, U+895E-U+8960, U+8964, U+8966, U+896A, U+896D, U+896F, U+8972, U+8974, U+8977, U+897E-U+897F, U+8981, U+8983, U+8986-U+8988, U+898A-U+898B, U+898F, U+8993, U+8996-U+8998, U+899A, U+89A1, U+89A6-U+89A7, U+89A9-U+89AA, U+89AC, U+89AF, U+89B2-U+89B3, U+89BA, U+89BD, U+89BF-U+89C0, U+89D2, U+89DA, U+89DC-U+89DD, U+89E3, U+89E6-U+89E7, U+89F4, U+89F8, U+8A00, U+8A02-U+8A03, U+8A08, U+8A0A, U+8A0C, U+8A0E, U+8A10, U+8A12-U+8A13, U+8A16-U+8A18, U+8A1B, U+8A1D, U+8A1F, U+8A23, U+8A25, U+8A2A, U+8A2D, U+8A31, U+8A33-U+8A34, U+8A36-U+8A37, U+8A3A-U+8A3C, U+8A41, U+8A46, U+8A48, U+8A50-U+8A52, U+8A54-U+8A55, U+8A5B, U+8A5E, U+8A60, U+8A62-U+8A63, U+8A66, U+8A69, U+8A6B-U+8A6E, U+8A70-U+8A73, U+8A79, U+8A7C, U+8A82, U+8A84-U+8A85, U+8A87, U+8A89, U+8A8C-U+8A8D, U+8A91, U+8A93, U+8A95, U+8A98, U+8A9A, U+8A9E, U+8AA0-U+8AA1, U+8AA3-U+8AA8, U+8AAC-U+8AAD, U+8AB0, U+8AB2, U+8AB9, U+8ABC, U+8ABE-U+8ABF, U+8AC2, U+8AC4, U+8AC7, U+8ACB-U+8ACD, U+8ACF, U+8AD2, U+8AD6, U+8ADA-U+8ADC, U+8ADE-U+8AE2, U+8AE4, U+8AE6-U+8AE7, U+8AEB, U+8AED-U+8AEE, U+8AF1, U+8AF3, U+8AF6-U+8AF8, U+8AFA, U+8AFE, U+8B00-U+8B02, U+8B04, U+8B07, U+8B0C, U+8B0E, U+8B10, U+8B14, U+8B16-U+8B17, U+8B19-U+8B1B, U+8B1D, U+8B20-U+8B21, U+8B26, U+8B28, U+8B2B-U+8B2C, U+8B33, U+8B39, U+8B3E, U+8B41, U+8B49, U+8B4C, U+8B4E-U+8B4F, U+8B53, U+8B56, U+8B58, U+8B5A-U+8B5C, U+8B5F, U+8B66, U+8B6B-U+8B6C, U+8B6F-U+8B72, U+8B74, U+8B77, U+8B7D, U+8B7F-U+8B80, U+8B83, U+8B8A, U+8B8C, U+8B8E, U+8B90, U+8B92-U+8B93, U+8B96, U+8B99-U+8B9A, U+8C37, U+8C3A, U+8C3F, U+8C41, U+8C46, U+8C48, U+8C4A, U+8C4C, U+8C4E, U+8C50, U+8C55, U+8C5A, U+8C61-U+8C62, U+8C6A-U+8C6C, U+8C78-U+8C7A, U+8C7C, U+8C82, U+8C85, U+8C89-U+8C8A, U+8C8C-U+8C8E, U+8C94, U+8C98, U+8C9D-U+8C9E, U+8CA0-U+8CA2, U+8CA7-U+8CB0, U+8CB2-U+8CB4, U+8CB6-U+8CB8, U+8CBB-U+8CBD, U+8CBF-U+8CC4, U+8CC7-U+8CC8, U+8CCA, U+8CCD-U+8CCE, U+8CD1, U+8CD3, U+8CDA-U+8CDC, U+8CDE, U+8CE0, U+8CE2-U+8CE4, U+8CE6, U+8CEA, U+8CED, U+8CF0, U+8CF4, U+8CFA-U+8CFD, U+8D04-U+8D05, U+8D07-U+8D08, U+8D0A-U+8D0B, U+8D0D, U+8D0F-U+8D10, U+8D12-U+8D14, U+8D16, U+8D64, U+8D66-U+8D67, U+8D6B, U+8D6D, U+8D70-U+8D71, U+8D73-U+8D74, U+8D76-U+8D77, U+8D81, U+8D85, U+8D8A, U+8D99, U+8DA3, U+8DA8, U+8DB3, U+8DBA, U+8DBE, U+8DC2, U+8DCB-U+8DCC, U+8DCF, U+8DD6, U+8DDA-U+8DDB, U+8DDD, U+8DDF, U+8DE1, U+8DE3, U+8DE8, U+8DEA-U+8DEB, U+8DEF, U+8DF3, U+8DF5, U+8DFC, U+8DFF, U+8E08-U+8E0A, U+8E0F-U+8E10, U+8E1D-U+8E1F, U+8E2A, U+8E30, U+8E34-U+8E35, U+8E42, U+8E44, U+8E47-U+8E4A, U+8E4C, U+8E50, U+8E55, U+8E59, U+8E5F-U+8E60, U+8E63-U+8E64, U+8E72, U+8E74, U+8E76, U+8E7C, U+8E81, U+8E84-U+8E85, U+8E87, U+8E8A-U+8E8B, U+8E8D, U+8E91, U+8E93-U+8E94, U+8E99, U+8EA1, U+8EAA-U+8EAC, U+8EAF-U+8EB1, U+8EBE, U+8EC0, U+8EC5-U+8EC6, U+8EC8, U+8ECA-U+8ECD, U+8ECF, U+8ED2, U+8EDB, U+8EDF, U+8EE2-U+8EE3, U+8EEB, U+8EF8, U+8EFB-U+8EFE, U+8F03, U+8F05, U+8F09-U+8F0A, U+8F0C, U+8F12-U+8F15, U+8F19, U+8F1B-U+8F1D, U+8F1F, U+8F26, U+8F29-U+8F2A, U+8F2F, U+8F33, U+8F38-U+8F39, U+8F3B, U+8F3E-U+8F3F, U+8F42, U+8F44-U+8F46, U+8F49, U+8F4C-U+8F4E, U+8F57, U+8F5C, U+8F5F, U+8F61-U+8F64, U+8F9B-U+8F9C, U+8F9E-U+8F9F, U+8FA3, U+8FA7-U+8FA8, U+8FAD-U+8FB2, U+8FB7, U+8FBA-U+8FBC, U+8FBF, U+8FC2, U+8FC4-U+8FC5, U+8FCE, U+8FD1, U+8FD4, U+8FDA, U+8FE2, U+8FE5-U+8FE6, U+8FE9-U+8FEB, U+8FED, U+8FEF-U+8FF0, U+8FF4, U+8FF7-U+8FFA, U+8FFD, U+9000-U+9001, U+9003, U+9005-U+9006, U+900B, U+900D-U+9011, U+9013-U+9017, U+9019-U+901A, U+901D-U+9023, U+9027, U+902E, U+9031-U+9032, U+9035-U+9036, U+9038-U+9039, U+903C, U+903E, U+9041-U+9042, U+9045, U+9047, U+9049-U+904B, U+904D-U+9056, U+9058-U+9059, U+905C, U+905E, U+9060-U+9061, U+9063, U+9065, U+9067-U+9069, U+906D-U+906F, U+9072, U+9075-U+9078, U+907A, U+907C-U+907D, U+907F-U+9084, U+9087, U+9089-U+908A, U+908F, U+9091, U+90A3, U+90A6, U+90A8, U+90AA, U+90AF, U+90B1, U+90B5, U+90B8, U+90C1, U+90CA, U+90CE, U+90DB, U+90DE, U+90E1-U+90E2, U+90E4, U+90E8, U+90ED, U+90F5, U+90F7, U+90FD, U+9102, U+9112, U+9115, U+9119, U+9127, U+912D, U+9130, U+9132, U+9149-U+914E, U+9152, U+9154, U+9156, U+9158, U+9162-U+9163, U+9165, U+9169-U+916A, U+916C, U+9172-U+9173, U+9175, U+9177-U+9178, U+9182, U+9187, U+9189, U+918B, U+918D, U+9190, U+9192, U+9197, U+919C, U+91A2, U+91A4, U+91AA-U+91AC, U+91AF, U+91B1, U+91B4-U+91B5, U+91B8, U+91BA, U+91C0-U+91C1, U+91C6-U+91C9, U+91CB-U+91D1, U+91D6-U+91D8, U+91DA-U+91DF, U+91E1, U+91E3-U+91E7, U+91ED-U+91EE, U+91F5-U+91F6, U+91FC, U+91FF, U+9206, U+920A, U+920D-U+920E, U+9210-U+9211, U+9214-U+9215, U+921E, U+9229, U+922C, U+9234, U+9237, U+9239-U+923A, U+923C, U+923F-U+9240, U+9244-U+9245, U+9248-U+9249, U+924B, U+924E, U+9250-U+9251, U+9257, U+9259-U+925B, U+925E, U+9262, U+9264, U+9266-U+9267, U+9271, U+9277-U+9278, U+927E, U+9280, U+9283, U+9285, U+9288, U+9291, U+9293, U+9295-U+9296, U+9298, U+929A-U+929C, U+92A7, U+92AD, U+92B7, U+92B9, U+92CF-U+92D0, U+92D2-U+92D3, U+92D5, U+92D7, U+92D9, U+92E0, U+92E4, U+92E7, U+92E9-U+92EA, U+92ED, U+92F2-U+92F3, U+92F8-U+92FC, U+92FF, U+9302, U+9304, U+9306, U+930F-U+9310, U+9318-U+931A, U+931D-U+931E, U+9320-U+9323, U+9325-U+9326, U+9328, U+932B-U+932C, U+932E-U+932F, U+9332, U+9335, U+933A-U+933B, U+9344, U+9348, U+934A-U+934B, U+934D, U+9354, U+9356-U+9357, U+935B-U+935C, U+9360, U+936C, U+936E, U+9370, U+9375, U+937C, U+937E, U+938C, U+9394, U+9396-U+9397, U+939A, U+93A4, U+93A7, U+93AC-U+93AE, U+93B0, U+93B9, U+93C3, U+93C6, U+93C8, U+93D0-U+93D1, U+93D6-U+93D8, U+93DD-U+93DE, U+93E1, U+93E4-U+93E5, U+93E8, U+93F8, U+9403, U+9407, U+9410, U+9413-U+9414, U+9418-U+941A, U+9421, U+942B, U+9431, U+9435-U+9436, U+9438, U+943A, U+9441, U+9444-U+9445, U+9448, U+9451-U+9453, U+945A-U+945B, U+945E, U+9460, U+9462, U+946A, U+9470, U+9475, U+9477, U+947C-U+947F, U+9481, U+9577, U+9580, U+9582-U+9583, U+9587, U+9589-U+958B, U+958F, U+9591-U+9594, U+9596, U+9598-U+9599, U+95A0, U+95A2-U+95A5, U+95A7-U+95A8, U+95AD, U+95B2, U+95B9, U+95BB-U+95BC, U+95BE, U+95C3, U+95C7, U+95CA, U+95CC-U+95CD, U+95D4-U+95D6, U+95D8, U+95DC, U+95E1-U+95E2, U+95E5, U+961C, U+9621, U+9628, U+962A, U+962E-U+962F, U+9632, U+963B, U+963F-U+9640, U+9642, U+9644, U+964B-U+964D, U+964F-U+9650, U+965B-U+965F, U+9662-U+9666, U+966A, U+966C, U+9670, U+9672-U+9673, U+9675-U+9678, U+967A, U+967D, U+9685-U+9686, U+9688, U+968A-U+968B, U+968D-U+968F, U+9694-U+9695, U+9697-U+9699, U+969B-U+969D, U+96A0, U+96A3, U+96A7-U+96A8, U+96AA, U+96AF-U+96B2, U+96B4, U+96B6-U+96B9, U+96BB-U+96BC, U+96C0-U+96C1, U+96C4-U+96C7, U+96C9, U+96CB-U+96CE, U+96D1, U+96D5-U+96D6, U+96D9, U+96DB-U+96DC, U+96E2-U+96E3, U+96E8, U+96EA-U+96EB, U+96F0, U+96F2, U+96F6-U+96F7, U+96F9, U+96FB, U+9700, U+9704, U+9706-U+9708, U+970A, U+970D-U+970F, U+9711, U+9713, U+9716, U+9719, U+971C, U+971E, U+9724, U+9727, U+972A, U+9730, U+9732-U+9733, U+9738-U+9739, U+973B, U+973D-U+973E, U+9742-U+9744, U+9746, U+9748-U+9749, U+974D, U+974F, U+9751-U+9752, U+9755-U+9756, U+9759, U+975C, U+975E, U+9760-U+9762, U+9764, U+9766, U+9768-U+9769, U+976B, U+976D, U+9771, U+9774, U+9779-U+977A, U+977C, U+9781, U+9784-U+9786, U+978B, U+978D, U+978F-U+9790, U+9798, U+979C, U+97A0, U+97A3, U+97A6, U+97A8, U+97AB, U+97AD, U+97B3-U+97B4, U+97C3, U+97C6, U+97C8, U+97CB, U+97D3, U+97DC, U+97ED-U+97EE, U+97F2-U+97F3, U+97F5-U+97F6, U+97FB, U+97FF, U+9801-U+9803, U+9805-U+9806, U+9808, U+980C, U+980F-U+9813, U+9817-U+9818, U+981A, U+9821, U+9824, U+982C-U+982D, U+9830, U+9834, U+9837-U+9838, U+983B-U+983D, U+9846, U+984B-U+984F, U+9854-U+9855, U+9857-U+9858, U+985A-U+985B, U+985E, U+9865, U+9867, U+986B, U+986F-U+9871, U+9873-U+9874, U+98A8, U+98AA, U+98AF, U+98B1, U+98B6, U+98C3-U+98C4, U+98C6, U+98DB-U+98DC, U+98DF, U+98E2, U+98E9, U+98EB, U+98ED-U+98EF, U+98F2, U+98F4, U+98FC-U+98FE, U+9903, U+9905, U+9909-U+990A, U+990C, U+9910, U+9912-U+9914, U+9918, U+991D-U+991E, U+9920-U+9921, U+9924, U+9927-U+9928, U+992C, U+992E, U+993D-U+993E, U+9942, U+9945, U+9949, U+994B-U+994C, U+9950-U+9952, U+9955, U+9957, U+9996-U+9999, U+999E, U+99A5, U+99A8, U+99AC-U+99AE, U+99B3-U+99B4, U+99BC, U+99C1, U+99C4-U+99C6, U+99C8, U+99D0-U+99D2, U+99D5, U+99D8, U+99DB, U+99DD, U+99DF, U+99E2, U+99ED-U+99EE, U+99F1-U+99F2, U+99F8, U+99FB, U+99FF, U+9A01, U+9A05, U+9A0E-U+9A0F, U+9A12-U+9A13, U+9A19, U+9A28, U+9A2B, U+9A30, U+9A37, U+9A3E, U+9A40, U+9A42-U+9A43, U+9A45, U+9A4D-U+9A4E, U+9A52, U+9A55, U+9A57, U+9A5A-U+9A5B, U+9A5F, U+9A62, U+9A64-U+9A65, U+9A69-U+9A6B, U+9AA8, U+9AAD, U+9AB0, U+9AB8, U+9ABC, U+9AC0, U+9AC4, U+9ACF, U+9AD1, U+9AD3-U+9AD4, U+9AD8-U+9AD9, U+9ADC, U+9ADE-U+9ADF, U+9AE2-U+9AE3, U+9AE6, U+9AEA-U+9AEB, U+9AED-U+9AEF, U+9AF1, U+9AF4, U+9AF7, U+9AFB, U+9B06, U+9B18, U+9B1A, U+9B1F, U+9B22-U+9B23, U+9B25, U+9B27-U+9B2A, U+9B2E-U+9B2F, U+9B31-U+9B32, U+9B3B-U+9B3C, U+9B41-U+9B45, U+9B4D-U+9B4F, U+9B51, U+9B54, U+9B58, U+9B5A, U+9B6F, U+9B72, U+9B74-U+9B75, U+9B83, U+9B8E-U+9B8F, U+9B91-U+9B93, U+9B96-U+9B97, U+9B9F-U+9BA0, U+9BA8, U+9BAA-U+9BAB, U+9BAD-U+9BAE, U+9BB1, U+9BB4, U+9BB9, U+9BBB, U+9BC0, U+9BC6, U+9BC9-U+9BCA, U+9BCF, U+9BD1-U+9BD2, U+9BD4, U+9BD6, U+9BDB, U+9BE1-U+9BE4, U+9BE8, U+9BF0-U+9BF2, U+9BF5, U+9C00, U+9C04, U+9C06, U+9C08-U+9C0A, U+9C0C-U+9C0D, U+9C10, U+9C12-U+9C15, U+9C1B, U+9C21, U+9C24-U+9C25, U+9C2D-U+9C30, U+9C32, U+9C39-U+9C3B, U+9C3E, U+9C46-U+9C48, U+9C52, U+9C57, U+9C5A, U+9C60, U+9C67, U+9C76, U+9C78, U+9CE5, U+9CE7, U+9CE9, U+9CEB-U+9CEC, U+9CF0, U+9CF3-U+9CF4, U+9CF6, U+9D03, U+9D06-U+9D09, U+9D0E, U+9D12, U+9D15, U+9D1B, U+9D1F, U+9D23, U+9D26, U+9D28, U+9D2A-U+9D2C, U+9D3B, U+9D3E-U+9D3F, U+9D41, U+9D44, U+9D46, U+9D48, U+9D50-U+9D51, U+9D59, U+9D5C-U+9D5E, U+9D60-U+9D61, U+9D64, U+9D6B-U+9D6C, U+9D6F-U+9D70, U+9D72, U+9D7A, U+9D87, U+9D89, U+9D8F, U+9D9A, U+9DA4, U+9DA9, U+9DAB, U+9DAF, U+9DB2, U+9DB4, U+9DB8, U+9DBA-U+9DBB, U+9DC1-U+9DC2, U+9DC4, U+9DC6, U+9DCF, U+9DD3, U+9DD7, U+9DD9, U+9DE6, U+9DED, U+9DEF, U+9DF2, U+9DF8-U+9DFA, U+9DFD, U+9E19-U+9E1B, U+9E1E, U+9E75, U+9E78-U+9E79, U+9E7C-U+9E7D, U+9E7F, U+9E81, U+9E88, U+9E8B-U+9E8C, U+9E91-U+9E93, U+9E95, U+9E97, U+9E9D, U+9E9F, U+9EA5-U+9EA6, U+9EA9-U+9EAA, U+9EAD, U+9EB4-U+9EB5, U+9EB8-U+9EBC, U+9EBE-U+9EBF, U+9EC3-U+9EC4, U+9ECC-U+9ED2, U+9ED4, U+9ED8-U+9ED9, U+9EDB-U+9EDE, U+9EE0, U+9EE5, U+9EE8, U+9EEF, U+9EF4, U+9EF6-U+9EF7, U+9EF9, U+9EFB-U+9EFD, U+9F07-U+9F08, U+9F0E, U+9F13, U+9F15, U+9F20-U+9F21, U+9F2C, U+9F3B, U+9F3E, U+9F4A-U+9F4B, U+9F4E-U+9F4F, U+9F52, U+9F54, U+9F5F-U+9F63, U+9F66-U+9F67, U+9F6A, U+9F6C, U+9F72, U+9F76-U+9F77, U+9F8D, U+9F95, U+9F9C-U+9F9D, U+9FA0, U+F91D, U+F928-U+F929, U+F936, U+F999, U+F9C3, U+F9D0, U+F9DC, U+FA0E-U+FA2D, U+FA30-U+FA31, U+FA33-U+FA38, U+FA3A-U+FA3B, U+FA3D, U+FA3F-U+FA41, U+FA43-U+FA48, U+FA4A-U+FA57, U+FA59-U+FA5C, U+FA5F, U+FA61-U+FA65, U+FA67-U+FA6A, U+FB01-U+FB02, U+FE10-U+FE12, U+FE31-U+FE33, U+FE35-U+FE44, U+FE47-U+FE48, U+FF01-U+FF5E, U+FF61-U+FF9F, U+FFE0-U+FFE5, U+FFE8, U+1F100, U+20B9F, U+21A1A, U+243D0, U+25874, U+28CDD, U+28EF6, U+2F80F, U+2F884, U+2F8D3, U+2F920
    @@ -1824,17 +1712,17 @@

    Xanh Mono
    -
    -
    +
    @@ -1946,10 +1802,10 @@
    Failing tests
    - + - + @@ -1959,65 +1815,65 @@
    Failing tests
    FontBakery QA
    - 86% - 86% + 83% + 83% - + - - + + - - - - + + + + - Universal - Universal + Google Fonts + Google Fonts - 75% - 75% + 84% + 84% - + - - + + - - - - + + + + - Google Fonts - Google Fonts + Universal + Universal - 86% - 86% + 68% + 68%
    -
  • Full Fontbakery report
  • +
  • Full Fontbakery report
  • diff --git a/fonts b/fonts new file mode 160000 index 00000000..ee078f58 --- /dev/null +++ b/fonts @@ -0,0 +1 @@ +Subproject commit ee078f58368eb6097f0238b22b25311906cc35f3 diff --git a/googlefonts/__pycache__/__init__.cpython-310.pyc b/googlefonts/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 00000000..1965a65d Binary files /dev/null and b/googlefonts/__pycache__/__init__.cpython-310.pyc differ